【问题标题】:Mysql Fulltext search returns empty result while there are 100+ rowsMysql全文搜索返回空结果,而有100+行
【发布时间】:2015-06-21 06:52:45
【问题描述】:

我用来获取行的查询:

SELECT * FROM `sentence` WHERE MATCH(text) AGAINST('hello')

当我运行这个查询时,Mysql 返回空结果。

但是,如果我使用 LIKE 关键字来获取行

SELECT * FROM `sentence` WHERE text LIKE '%hello%'

然后,Mysql 返回 144 行。

让我们来个更奇怪的事情

Mysql全文对某些单词o.O正常工作

例如,当我搜索“杀手”字时,LIKE 返回 44,全文返回 20,这对我来说没问题。

这种情况对我来说没有意义。请解释这一点并提出解决方案。

【问题讨论】:

  • 在示例表中添加一些不匹配但您认为应该匹配的列的示例。
  • 用一些数据添加你的数据库
  • 感谢您的关注。问题解决了。

标签: mysql search full-text-search


【解决方案1】:

要回答您的第一种情况,即hello 什么都不返回,它是全文搜索停用词,当您搜索单词hello 时它没有做任何事情

http://dev.mysql.com/doc/refman/5.6/en/fulltext-stopwords.html

您可以将自己的文件设置为

  • 在 mysql 配置文件中,对于 debian /etc/mysql/my.cnf 添加 ft_stopword_file='path/to/stopword_file.txt'

  • 如果需要,我们可以将此文件留空。

第二种情况killer 没有返回预期的行数,这可能有多种原因

  • 单词中有空格
  • 区分大小写问题。
  • 并且全文搜索只会匹配complete word,因为您正在尝试它不会与AGAINST('killer') 进行模式匹配,但使用like '%killer%' 将匹配具有字符串killer 的任何内容。

如果您创建一个有用的小提琴,则可以复制问题并查看问题的原因。但是对于第一种情况,它是停用词列表,这就是您获得 0 行的原因。

这是我之前遇到的类似情况

mysql ft_min_word_len change on ubuntu does not work

【讨论】:

  • 感谢您的帮助。显然,出现此问题是因为“你好”是停用词。我将引擎从 MyIsam 更改为没有停用词“hello”的 InnoDB,问题已解决。我更改了停用词文件以避免此类问题
  • 对,InnoDB 没有这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2014-12-01
  • 1970-01-01
相关资源
最近更新 更多