我有一个奇怪的问题-我使用MySQL 5.1和一个带有Fulltable Index的表。在mysql-config中,ft_min_word_len
被设置为2(因此长度至少为两个字符的单词会被索引)。
下面的查询被简化了,但与原始查询具有相同的效果。
当我搜索:
SELECT company FROM my_table WHERE MATCH (company) AGAINST ('intern*' IN BOOLEAN MODE)
我有一些公司的名字中有"internat",比如"国际股份有限公司","Intership.org"
然而,当我搜索:
SELECT company FROM my_table WHERE MATCH (company) AGAINST ('just*' IN BOOLEAN MODE)
我没有得到任何结果,尽管表中有一个条目"正义与旅行"。
但当我搜索:
SELECT company FROM my_table WHERE MATCH (company) AGAINST ('travelling*' IN BOOLEAN MODE)
我得到了"公正与旅行"-进入/正确的结果。
如果我用LIKE %just%
而不是MATCH-AGAINST
搜索,我也会得到正确的结果。
有人知道为什么我在第二个提到的查询中没有得到正确的结果吗?
找到了麻烦制造者:
这是因为停止语列表。通过在my.cnf中添加以下行禁用列表解决了问题:
ft_stopword_file=''
您可以在以下链接中找到更多详细信息:
MySQL:11.9.6。微调MySQL全文搜索
MySQL:11.9.4。全文停止字