如何计算MySQL FULLTEXT索引查询返回结果的置信度?
用MySQL FULLTEXT索引获取搜索排名(Score)
嘿,我来给你唠唠怎么通过MySQL的FULLTEXT索引获取搜索结果的相关性排名(也就是score):
首先,当你已经在表的某几列(比如title和body)上创建了FULLTEXT索引后,就可以通过MATCH()和AGAINST()函数计算每一行和搜索词的相关性得分,这个得分就是你要的"rank"。
完整示例查询
SELECT id, title, body, -- 计算相关性得分并命名为score MATCH(title, body) AGAINST ('Security implications of running MySQL as root' IN NATURAL LANGUAGE MODE) AS score FROM articles -- 过滤出匹配搜索词的结果 WHERE MATCH(title, body) AGAINST ('Security implications of running MySQL as root' IN NATURAL LANGUAGE MODE) -- 按得分倒序排列,最相关的结果排在最前面 ORDER BY score DESC;
几个关键细节要注意:
- 为什么要重复写
MATCH...AGAINST?因为WHERE子句是用来筛选出和搜索词匹配的行,而SELECT里的调用是专门计算相关性得分,用来排序或者展示给用户看的。 IN NATURAL LANGUAGE MODE是自然语言搜索的默认模式,其实可以省略不写,但加上会让代码更直观,可读性更高。- 得分的高低直接反映内容和搜索词的匹配程度:得分越高,说明内容和搜索词的相关性越强,所以通常都会按
score DESC来排序。
额外小技巧
- 如果想返回表中所有行(包括和搜索词不匹配的,这类行的score会是0),可以去掉
WHERE子句,但这样可能会返回大量无关结果,按需使用即可。 - 注意MySQL对FULLTEXT索引的默认限制:比如太短的词(默认是4个字符以下)会被忽略,还有一些停用词(比如"the"、"a"这类常用词)也不会被纳入搜索计算,这些都可以通过修改配置来调整。
内容的提问来源于stack exchange,提问作者user1454926
相关产品推荐
相关产品推荐

