【问题标题】:match() against() doesn't work but like '%$s%' doesmatch() against() 不起作用,但就像 '%$s%' 一样
【发布时间】:2011-06-19 15:54:36
【问题描述】:

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

"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 条记录,对吧?

【问题讨论】:

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


【解决方案1】:

来自我的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 表中每隔一行返回一次。对于小型数据集,它可能不太理想。

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

【讨论】:

  • 这真的有点搞砸了...我想我会使用 LIKE %% 搜索
  • @user 是的,但通常在实时数据库中应该不是什么大问题。还可以查看上面@OMG 的评论
猜你喜欢
  • 2013-01-24
  • 2016-11-01
  • 1970-01-01
  • 2011-07-03
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多