2011-03-24 44 views
0

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

我的查询如下:

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

回答

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') 
+0

对不起。我的问题是如何获得这些分数,并将它们从0-1变成一系列数字,无论它们有多大,但仍保持原始比例。 – Bojangles 2011-03-24 10:42:02

+0

简单的数学就是'score/MAX(得分)' – anothershrubery 2011-03-24 10:44:56

+0

当然!感谢那。你能发布一个简单的示例查询,以便我可以正确地包裹头部吗?谢谢你的帮助。 – Bojangles 2011-03-24 10:49:10