Mysql 全文搜索 returns 超过 100 行时为空结果
Mysql Fulltext search returns empty result while there are 100+ rows
我用来获取行的查询:
SELECT * FROM `sentence` WHERE MATCH(text) AGAINST('hello')
Mysql returns 当我 运行 这个查询时结果为空
但是,如果我使用 LIKE 关键字来获取行
SELECT * FROM `sentence` WHERE text LIKE '%hello%'
那么,Mysql returns 144行。
让我们来看看更奇怪的事情
Mysql 全文适用于某些单词 o.O
例如,当我搜索 'killer' 单词时,LIKE returns 44 和 Fulltext returns 20 对我来说没问题。
这种情况对我来说没有意义。请对此进行解释并提出解决方案。
要回答您的第一种情况,即 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%'
将匹配具有字符串 [=12] 的任何内容=].
要复制问题并查看问题的原因,如果您创建一个 fiddle 会有帮助。但对于第一种情况,它是停用词列表,这就是为什么你得到 0 行的原因。
这是我之前遇到的类似问题
mysql ft_min_word_len change on ubuntu does not work
我用来获取行的查询:
SELECT * FROM `sentence` WHERE MATCH(text) AGAINST('hello')
Mysql returns 当我 运行 这个查询时结果为空
但是,如果我使用 LIKE 关键字来获取行
SELECT * FROM `sentence` WHERE text LIKE '%hello%'
那么,Mysql returns 144行。
让我们来看看更奇怪的事情
Mysql 全文适用于某些单词 o.O
例如,当我搜索 'killer' 单词时,LIKE returns 44 和 Fulltext returns 20 对我来说没问题。
这种情况对我来说没有意义。请对此进行解释并提出解决方案。
要回答您的第一种情况,即 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%'
将匹配具有字符串 [=12] 的任何内容=].
要复制问题并查看问题的原因,如果您创建一个 fiddle 会有帮助。但对于第一种情况,它是停用词列表,这就是为什么你得到 0 行的原因。
这是我之前遇到的类似问题
mysql ft_min_word_len change on ubuntu does not work