2011-12-07 175 views
2

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

我已经完成了单个单词但不是短语。

+0

我想知道你是否愿意分享你拥有的这个数据库?我问,因为我正在寻找一个两个单词短语的表格(或者我可以放在一张表格中的列表)。我明白如果你不能(而且这个问题很古老),但我只是想我会尝试。 –

回答

2

你会想拉领域的FULLTEXT指数,使其更快,但你可以做

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

我应该说这个解决方案比@ Brad的解决方案更快,但是如果你想搜索精确的PHRASE,这是错误的解决方案。我想唯一正确的方法是用Brad的一个过滤这个查询得到的结果 – Dan

+0

我有一个数据库已经有各种各样的阶段,如“只要”,“谢谢”,“启动”和其他几千个短语。 。如果用户输入字符串“只要我很忙,我无法启动系统”我应该能够提取“只要”和“启动”它。我想,我无法从数据库中获取每个短语并搜索其在字符串中的出现。这将是非常不够的。有没有办法让用户可以使用输入字符串来查找数据库中的任何短语的出现? –

0

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

0

你在这里。这将需要所有输入的文本用户,获得独立的话,寻找任何的那些话(全部或部分 - 选择哪个where子句您的Wnt)

让我们假设$ 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.'<br/>'; 

// if you want to use IN 
$where_clause = " YOURCOL IN ('".implode("', '", $user_input_array)."')"; 
echo $where_clause.'<br/>'; 

// if you want to use LIKE 

$where_clause = "YOURCOL LIKE '%".implode("%' OR YOURCOL LIKE '%", $user_input_array)."%'"; 
echo $where_clause.'<br/>'; 
设置从上面

结果是:

YOURCOL = '喜' OR YOURCOL = '你好' OR YOURCOL = 'WH \' 在 'OR YOURCOL = 'ELS; E' OR YOURCOL = '是' OR YOURCOL ='新'OR YOURCOL ='选择'或YOURCOL ='1'或YOURCOL ='从'或YOURCOL ='双;'; 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% '或'YOURCOL LIKE'%new%'或YOURCOL LIKE'%select%'或YOURCOL LIKE'%1%'或YOURCOL LIKE'%'%%或YOURCOL LIKE'%dual;%'

0

有货MySQL你可以使用

SELECT * from <my_table> WHERE phrase_column LIKE '%my search phrase%' 

但它会是一个非常慢的查询,因为它将无法为我们e任何指数。它不支持任何形态。

如果你有大的短语足够的设置,你可以从扩展查询语言在狮身人面像聘请短语的操作来执行词组搜索,但http://sphinxsearch.com/docs/current.html#extended-syntax

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

你可以找到http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/快速狮身人面像配置指南发射了狮身人面像后,您可以连接到狮身人面像和使用词组搜索:

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

请注意单(串)和双(短语的操作)括号。

狮身人面像将返回短语ID,这样你可以从MySQL非常快速的方式检索它们(它通常选择使用主键)

另一个地方去寻找是http://lucene.apache.org/这是另一个伟大的全文搜索引擎。