2017-05-03 76 views
0

我想了解MATCH AGAINST的幕後情況。
它返回從0分到10分,但我不明白的標準。我只是能夠看到,試圖匹配它返回的確切字符串0.0906190574169159,而如果字符串根本不包含它將返回0.任何啓示?比賽反對揭開

+0

閱讀此:https://dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.html – ghenghy

+0

@ghenghy謝謝,但我已經讀過它。不幸的是我找不到這個問題的答案,除非你幫我整理一下 – Leggy7

回答

0

所以我說閱讀,但你說這是不夠的:dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.ht毫升

有關段落是這個:

「當在WHERE子句中使用MATCH()(如前面所示的示例)時,返回的行將自動按照相關性最高的順序自動排序,相關性值爲非負浮點數。相關性是根據行(文檔)中單詞的數量,行中唯一字的數量,集合中單詞的總數以及包含特定單詞的行數來計算的。「

如果你把頁面上的示例表和插入並運行此查詢:

SELECT MATCH (title,body) 
    AGAINST ('database' IN NATURAL LANGUAGE MODE) FROM articles; 

你得到:

+--------------------------------------------------------------------------+ 
| MATCH (title,body) 
     AGAINST ('database' IN NATURAL LANGUAGE MODE) | 
+--------------------------------------------------------------------------+ 
|              0.22764469683170319 | 
|                  0 | 
|                  0 | 
|                  0 | 
|              0.22764469683170319 | 
|                  0 | 
+--------------------------------------------------------------------------+ 

對於返回零行,沒有匹配,對於其他人來說,價值是基於它認爲匹配的「好」的等級。在這種情況下,匹配是相同的,所以值是相同的。相反,如果你跑:

SELECT MATCH (title,body) AGAINST ('Database comparison' IN NATURAL LANGUAGE MODE) FROM articles; 

你得到:

+--------------------+ 
| 0.0906190574169159 | 
|     0 | 
|     0 | 
|     0 | 
| 0.6961383819580078 | 
|     0 | 
+--------------------+ 

注意值現在是不同的。第一個非零結果的得分較低,因爲現在只有一些匹配,而另一個得分更高表示匹配更好。

+0

謝謝你的回答。我希望解釋如何計算準確度。如果我有一個全文列,並且我搜索完全匹配一行的字符串,我會希望該行與最大精度匹配,但事實並非如此。所以我想了解該集合中的發生重量以及它爲什麼被限制爲10 – Leggy7