Mysql查询,选择与关键字列表匹配的句子

时间:2011-05-01 18:29:20

标签: php mysql

我已经搜索了类似的问题,这些问题得到了解答并帮助了我,但我无法找到。所以,我的问题是,如何编写mysql查询来从DB中提取句子,其中包含从另一个句子生成的关键字,如下所示:

$tyrsena = "php statement for clause";  
$ques = "SELECT * FROM question WHERE title IN '$tyrsena'";  
$re = mysql_query($ques)or die(mysql_error());  
while ($da = mysql_fetch_assoc($re)){    
        $sugg = $da['title'];  
        echo $sugg;  
}

所以$tyrsena是我需要生成关键字的句子,我希望匹配question表中与这些关键字匹配的标题。
我提出的代码不起作用,只有当它的100%相同时才匹配它,我只是想象它想要达到的目的。谢谢你们:)

2 个答案:

答案 0 :(得分:6)

首先,你需要在表上创建一个“FULLTEXT”索引并在查询中使用MATCH()函数。

StackOverflow会搜索以下两个标记,并仔细阅读与此相关的问题和答案:

  • MySQL的
  • 全文本搜索

此外,您必须将源语句标记为单词列表,以便适合插入查询。天真的策略是在空格上进行拆分,并且对于每个结果的术语,剥去任何拖尾标点并将其全部转换为小写。 (例如,这保留了“时钟”)。您也可能剥离“'s”(撇号“s”)和“不”的任何实例以及类似的常见收缩。 (一种不那么天真的方法可以做到stemming

通常情况下,你也会过滤掉任何“停用词”(英语句子中常见的词语在关键词搜索中具有任何价值:of,a,an,the,by,for,in,it, ......等等(您应该可以通过简单的网络搜索轻松找到两三百个推荐英语stop words的列表)。(有些列在维基百科文章的底部。

答案 1 :(得分:1)

尝试:

$tyrsena = "php statement for clause";
$tyrsena = explode(' ', $tyrsena);
$tyrsena = implode("','", $tyrsena);
$ques = "SELECT * FROM question WHERE title IN '$tyrsena'"; 

或更快:

$tyrsena = "php statement for clause";
$tyrsena = str_replace(" ", "','", $tyrsena);