2016-03-08 83 views
1

我已經查看了mysql的布爾全文搜索文檔,並且有書面說,MATCH將返回一個浮點值以及一個示例。在其他地方,我發現對此的引用狀態相同,MATCH將按相關性分數返回浮點數。爲什麼MATCH返回整數相關性而不是float

但是當我運行此查詢

select 
match(j.name) against('banana* strawberr* coconut*' IN BOOLEAN MODE) as score 
from juices j 
order by score desc 

我得到0或者爲1。

這是一些線與1爲得分:

"Banana and strawberry flavor" 
"Apple and banana juice" 
"Coconuts with pickles" 

在我的理解是,「香蕉和草莓」系列應該得到比其他兩個更高的分數,因爲有兩個詞匹配?

+0

計算相關性的方式取決於您是否在進行BOOLEAN搜索以及使用的是哪個表引擎。 – CBroe

+0

在這種情況下,表引擎是MyISAM。關於布爾搜索。據我所知,默認的操作符是OR(編輯:文檔指出,當沒有指定+或 - 時,該字是可選的) – Ello

+0

您的查詢實際上不會過濾任何不匹配的行。 '...匹配(......)反對(...在BOOLEAN模式中)'會排除這個有點神奇的雙重目的表達式計算爲0(假)的行。唯一的其他可能的布爾結果是1. –

回答

0

我剛剛在我的一張桌子上遇到過這種情況,其中一張不同的桌子提供了預期的結果。選中以驗證您的表未設置爲MyISAM(只在匹配時返回1),您會希望InnoDB獲得您的匹配返回的浮點值,以便您可以按匹配的順序進行排序。

+0

謝謝,這從來沒有在文檔中聲明:/ – Ello

+0

我知道這是相當晚,希望它仍然會有所幫助。 – BrendonKoz

相關問題