2011-03-24 51 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