-->

规范化的MySQL全文得分(Normalise MySQL fulltext score)

2019-10-30 09:29发布

我在做一个非常标准的MySQL MATCH(...) AGAINST(...)查询。 我返回每个行作为列的得分score 。 这里的问题是,得分可以超过1,所以得到一个百分比棘手(乘以100),由于这一事实,我可以得到的分数大于1。我的问题是,我可以恢复正常的比分列,所以我得到所有得分从0到1,但保持它们的比例(例如,4:1的得分将是1,和2的分数将成为0.5等,但4可以是动态的上限)。

我的查询如下:

SELECT *, MATCH(body) AGAINST ('string') AS score 
FROM home_posts 
WHERE MATCH(body) AGAINST ('string') 

Answer 1:

在MySQL的得分MATCH是不是一个百分比,并试图将其转换成这样将完全是完全错误的做法。 你可以在阅读它背后的数学http://forge.mysql.com/wiki/MySQL_Internals_Algorithms#Full-text_Search

编辑:我会尝试

SELECT *, 
    MATCH(body) AGAINST ('string') AS score, 
    (MATCH(body) AGAINST ('string') / maxScore) AS normalisedScore
FROM home_posts, 
    (SELECT MAX(MATCH(body) AGAINST ('string')) AS maxScore 
     FROM home_posts) maxScoreTable
WHERE MATCH(body) AGAINST ('string') 


文章来源: Normalise MySQL fulltext score