2011-03-10 76 views
3

我在mysql中使用Match(Col1)Against(Val)如何以百分比的形式得到mysql匹配結果?

 
select match(body) against(body_var) from articles; 

現在如果完全匹配,我得到的結果是一個數字(例如14.43)。 這個數字是什麼意思?而主要問題是可我得到的結果以百分比的形式(如0.94)
感謝您的幫助

+0

據我瞭解,當你在「50%匹配」之後的「有趣的貓」文本中搜索「貓」時,你希望得到0.50。但這是不可能的,因爲在尋找「杜蘭」時會出現「杜蘭杜蘭」的情況。據我所知,當你搜索「杜蘭」時, 「杜蘭杜蘭」可以獲得更多的匹配點,即使你有一個單獨的「杜蘭」行。 – frail 2011-03-10 13:31:41

+0

@frail:我走了另一條路線......我在想,他看到所有行匹配的行的百分比...如果他只想要全文索引/列的匹配所代表的百分比 - 那麼可以理解杜蘭杜蘭會獲得更多的匹配點(因爲它發生更多) – CarpeNoctumDC 2011-03-11 00:33:01

+0

感謝frail和CarpeNoctumDC ,,,但我在找什麼是類似於PHP中的similar_text函數。再次感謝 – Alaa 2011-03-12 07:04:09

回答

1

有可能是一個更簡單的方法來做到這一點..不知怎的,我就倒下了兔子洞這一個。但它的測試和工程(成果回報率)

SELECT (mthCount/ttlCount) AS mPercent 
FROM (
    SELECT COUNT(*) AS mthCount 
    FROM articles WHERE (
    MATCH(body) AGAINST(body_var) 
    ) 
) AS MCount JOIN (
    SELECT COUNT(*) AS ttlCount 
    FROM articles 
) AS TCount; 

它返回一個記錄/同列mPercent

你也可以把它圓到小數點後兩位...

導致
SELECT FORMAT((mthCount/ttlCount),2) AS mPercent 
FROM (
    SELECT COUNT(*) AS mthCount 
    FROM articles WHERE (
    MATCH(body) AGAINST(body_var) 
    ) 
) AS MCount JOIN (
    SELECT COUNT(*) AS ttlCount 
    FROM articles 
) AS TCount; 

正如我說..我用50場比賽 三百五十零分之五十零= 0.1396648 ......(對於第一個結果) 0.14,四捨五入的結果


測試它針對358行如果您正在尋找將相關性值轉換爲單個結果的百分比 - 它不會真的發生...

來自MATCH/AGAINST的相關性值不是百分比匹配的良好指標。互聯網..搜索「將相關性值轉換爲百分比」...

如果你想訂購您的結果通過relevence匹配%,其中第一個結果總是爲100%relevence,你可以做到這一點...

至於試圖讓PHP之類的similar_text價值 - 你是更好地卸載的工作到客戶端...

Full-text search relevance is measured in?

http://forums.mysql.com/read.php?107,125239,146610#msg-146610

http://seminex.blogspot.com/2005/06/mysql-relevance-in-fulltext-search.html

+0

謝謝,但這會給我的百分比與真實相似度無關。我非常感謝你的幫助,但這不是我所期待的。 – Alaa 2011-03-12 07:08:25