热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在mySQL数据库中搜索短语-SearchingforphrasesinamySQLdatabase

IhaveamySQLdatabaseofwordsandphrasesthatissearchable.Iftheuserinputsalongstring,h

I have a mySQL database of words and phrases that is searchable. If the user inputs a long string, how do I search for any occurrences of phrases in my database that are contained in that string?

我有一个可搜索的单词和短语的mySQL数据库。如果用户输入长字符串,如何搜索数据库中包含在该字符串中的任何短语?

I have done it for single words but not for phrases.

我是用单个单词完成的,但不是短语。

5 个解决方案

#1


2  

Maybe use the fulltext features of mysql?

也许使用mysql的全文功能?

http://devzone.zend.com/26/using-mysql-full-text-searching/

This example uses Zend framework, but the SQL is the same.

此示例使用Zend框架,但SQL是相同的。

There are some open source options that will setup a separate fulltext search server if your indexing/ranking needs are more complex.

如果您的索引/排名需求更复杂,有一些开源选项将设置单独的全文搜索服务器。

Sphinx http://sphinxsearch.com/

Xapian http://xapian.org/

#2


2  

You're going to want to pull a FULLTEXT index on the fields to make it faster, but you can do

你想要在字段上提取一个FULLTEXT索引以使其更快,但你可以做到

SELECT *
FROM Table
WHERE MATCH ('column_name') AGAINST ('here is the phrase')

#3


0  

If you're going to be searching the text often, then full text would be your best bet. Also, I assume that your column is varchar (not TEXT) or else LIKE would not work.

如果您要经常搜索文本,那么全文将是您最好的选择。另外,我假设你的列是varchar(不是TEXT),否则LIKE不起作用。

#4


0  

Here you go. This will take all of the text user entered, get separate words and look for any of those words (whole or part - pick which where clause you wnt)

干得好。这将取得用户输入的所有文本,获取单独的单词并查找任何单词(全部或部分 - 选择您所在的where where子句)

Let's assume that $user_input is set from $_POST

我们假设$ user_input是从$ _POST设置的

$user_input = $_POST;
// try this one for sample data $user_input = "hi hello wh'at els;e is new select 1 from dual;";
$user_input_array = array_map('mysql_real_escape_string', explode(' ',$user_input));
$where_clause = "YOURCOL = '".implode("' OR YOURCOL = '", $user_input_array)."'";

echo $where_clause.'
'; // if you want to use IN $where_clause = " YOURCOL IN ('".implode("', '", $user_input_array)."')"; echo $where_clause.'
'; // if you want to use LIKE $where_clause = "YOURCOL LIKE '%".implode("%' OR YOURCOL LIKE '%", $user_input_array)."%'"; echo $where_clause.'
';

Results from above are:

以上结果是:

YOURCOL = 'hi' OR YOURCOL = 'hello' OR YOURCOL = 'wh\'at' OR YOURCOL = 'els;e' OR YOURCOL = 'is' OR YOURCOL = 'new' OR YOURCOL = 'select' OR YOURCOL = '1' OR YOURCOL = 'from' OR YOURCOL = 'dual;'

YOURCOL ='hi'或YOURCOL ='hello'或YOURCOL ='wh \'在'OR YOURCOL ='els; e'或YOURCOL ='是'或YOURCOL ='new'或YOURCOL ='select'或YOURCOL =' 1'或YOURCOL ='来自'OR YOURCOL ='dual;'

YOURCOL IN ('hi', 'hello', 'wh\'at', 'els;e', 'is', 'new', 'select', '1', 'from', 'dual;')

YOURCOL IN('hi','hello','wh''at','els; e','is','new','select','1','from','dual;')

YOURCOL LIKE '%hi%' OR YOURCOL LIKE '%hello%' OR YOURCOL LIKE '%wh\'at%' OR YOURCOL LIKE '%els;e%' OR YOURCOL LIKE '%is%' OR YOURCOL LIKE '%new%' OR YOURCOL LIKE '%select%' OR YOURCOL LIKE '%1%' OR YOURCOL LIKE '%from%' OR YOURCOL LIKE '%dual;%'

YOURCOL喜欢'%hi%'或YOURCOL喜欢'%hello%'或YOURCOL喜欢'%wh''%'或YOURCOL喜欢'%els; e%'或YOURCOL喜欢'%is%'或YOURCOL LIKE'%new %'或YOURCOL LIKE'%select%'或YOURCOL LIKE'%1%'或YOURCOL类似'%from%'或YOURCOL LIKE'%dual;%'

#5


0  

In stock MySQL you could use

有货MySQL你可以使用

SELECT * from  WHERE phrase_column LIKE '%my search phrase%' 

but it would be a VERY slow query as it will unable to use any index. And it doesn't supports any morphology.

但它将是一个非常慢的查询,因为它将无法使用任何索引。并且它不支持任何形态。

If you have big enough phrase set you could hire phrase operator from extended query language in Sphinx to perform phrase search as described in http://sphinxsearch.com/docs/current.html#extended-syntax

如果您有足够大的短语集,您可以在Sphinx中使用扩展查询语言中的短语运算符来执行短语搜索,如http://sphinxsearch.com/docs/current.html#extended-syntax中所述

Basically you could install Sphinx and create simple on-disk index which contains phrases from MySQL table you've mentioned. Later you could boost required phrases by adding rating to each document you index using additional integer column.

基本上你可以安装Sphinx并创建简单的磁盘索引,其中包含你提到的MySQL表中的短语。稍后,您可以通过使用其他整数列为您索引的每个文档添加评级来增强所需的短语。

You could find quick Sphinx configuration guide at http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/ After firing up Sphinx you could connect to Sphinx and using phrase search:

您可以在http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/找到快速的Sphinx配置指南。启动Sphinx后,您可以连接到Sphinx并使用短语搜索:

SELECT * FROM  WHERE MATCH('"my search phase"'); 

Please note both single (string) and double (phrase operator) parentheses.

请注意单(字符串)和双(短语运算符)括号。

Sphinx will return you phrase IDs so you can retrieve them from MySQL in very fast way (it is usually select using primary key)

Sphinx将返回短语ID,以便您可以非常快速地从MySQL中检索它们(通常使用主键选择)

Another place to look is http://lucene.apache.org/ which is another great full-text search engine.

另一个值得关注的地方是http://lucene.apache.org/,这是另一个很棒的全文搜索引擎。


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
author-avatar
书友41494390_263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有