match()对()不起作用,但像'%$ s%'那样

时间:2011-06-19 15:54:36

标签: mysql sql full-text-search sql-like

我的表格中有一个全文字段。其中一行是:

"this is the dog that ran over there"

我有以下mysql语句:

SELECT * 
  FROM `table` 
 WHERE MATCH (column) AGAINST ('dog that ran')

...返回0条记录

SELECT * 
  FROM `table` 
 WHERE `column` LIKE '%dog that ran%'

...返回1条记录

为何与众不同?他们都应该返回1条记录,对吧?

1 个答案:

答案 0 :(得分:5)

来自我的answer to another question

全文搜索有一些奇怪的怪癖。

例如,this page的最后几段中描述的行为可能是您遇到问题的原因:

  

....例如,虽然前面显示的文章表的每一行都有“MySQL”这个词,但搜索这个词不会产生任何结果:

mysql> SELECT * FROM articles
    -> WHERE MATCH (title,body) AGAINST ('MySQL');
 Empty set (0.00 sec)
     

搜索结果为空,因为“MySQL”一词至少存在于50%的行中。因此,它被有效地视为一个禁用词。对于大型数据集,这是最理想的行为:自然语言查询不应返回1GB表中的每隔一行。对于小型数据集,可能不太理想。

这里的答案是添加更多行,或使用布尔搜索。