规范化MySQL全文分数

时间:2011-03-24 10:33:08

标签: php mysql full-text-search normalization

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

我的查询如下:

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

1 个答案:

答案 0 :(得分: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')