MySQL 5.7中ngram分词全文索引匹配双字词‘贷款’无结果的问题
解决MySQL Ngram全文索引无法匹配高频词“贷款”的问题
这个问题我之前也碰到过,核心原因是MySQL自然语言模式的全文索引会自动过滤出现频率超过50%的词——你的3条数据里全部包含“贷款”,出现频率100%,已经远超默认阈值,所以自然语言模式下查询会被直接忽略,返回空结果。而“企业贷款”能查到,是因为自然语言模式会计算多词组合的相关性得分,即使单个词高频,组合后的匹配逻辑还是会返回结果。
下面给你两个可行的解决办法:
方法一:使用布尔模式(BOOLEAN MODE)查询
布尔模式不会应用高频词过滤规则,哪怕词在所有行里都出现,也能正常匹配。修改你的查询语句为:
SELECT * FROM tb WHERE MATCH (keywords, title) AGAINST ('贷款' IN BOOLEAN MODE);
这个语句会返回所有包含“贷款”的行,完全符合你的需求。
方法二:调整全文索引的频率阈值(不推荐)
如果你一定要用自然语言模式,理论上可以通过修改MySQL源码或使用第三方插件调整高频词过滤阈值,但这个操作成本高,还会影响整个数据库的全文索引性能,所以非常不推荐日常场景使用。
另外补充一点:你已经设置了ngram_token_size=2,这个是正确的,“贷款”作为双字词,完全符合ngram分词的要求,所以不是分词长度的问题。
内容的提问来源于stack exchange,提问作者Aario
相关产品推荐
相关产品推荐

