使用部分引用的字符串(mysql)进行全文搜索

时间:2011-11-09 20:54:43

标签: mysql full-text-search boolean

我正在使用mysql中的全文搜索来搜索一个相当大的文章数据库,并且正在尝试使用带引号的字符串来解决这一问题。

基本上,当我搜索“约翰史密斯”被捕时,我希望它能归还那些有“约翰史密斯”和“逮捕”的文章,但不是只有“约翰”和“逮捕”的故事,绝对不是故事只有“逮捕”

全文搜索似乎不会同时尊重字符串中的引号和其他字词。

我试过了:

MATCH(headline,byline,body,keywords) 
AGAINST('"John Smith" arrest' IN BOOLEAN MODE)

MATCH(headline,byline,body,keywords) 
AGAINST('"John Smith" + arrest' IN BOOLEAN MODE)

只做这样的事情会没事吗?

MATCH(headline,byline,body,keywords) 
AGAINST('John + Smith + arrest' IN BOOLEAN MODE)

这可能会成功,但不会完全准确。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

根据http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html,格式为:

'+"John Smith" +arrest'

答案 1 :(得分:2)

默认情况下,全文搜索使用OR组合术语。这意味着,在您的第一个示例中,您正在搜索带有“arrest”或“John Smith”短语的行。要要求返回的行包含两个术语,请使用加号运算符:

MATCH(headline,byline,body,keywords) 
AGAINST('+"John Smith" +arrest' IN BOOLEAN MODE)

答案 2 :(得分:1)

我不确定"+可以合并,但请尝试此

MATCH(headline,byline,body,keywords) 
AGAINST('+"John Smith" +arrest' IN BOOLEAN MODE)

如果不起作用,那么这应该

WHERE
  MATCH(headline,byline,body,keywords) 
  AGAINST('"John Smith"' IN BOOLEAN MODE)
AND
  MATCH(headline,byline,body,keywords) 
  AGAINST('+arrest' IN BOOLEAN MODE)

docs http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html