簡體   English   中英

MySQL-具有部分單詞匹配和相關性得分(FULLTEXT)的高效搜索

[英]MySQL - Efficient search with partial word match and relevancy score (FULLTEXT)

我該如何進行MySQL搜索,該搜索將匹配部分單詞但還提供准確的相關性排序?

SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS relevance
FROM subjects
WHERE MATCH(name) AGAINST ('math*' IN BOOLEAN MODE)

布爾模式的問題是相關性總是返回1,因此結果的排序不是很好。 例如,如果我將搜索結果限制為5,則返回的結果有時似乎並不是最相關的。

如果我以自然語言模式搜索,我的理解是相關性分數很有用,但我無法匹配部分單詞。

有沒有一種方法可以執行滿足所有這些條件的查詢:

  • 可以匹配部分單詞
  • 返回的結果具有正確的相關性
  • 高效

到目前為止,我最好的是:

SELECT name
FROM subjects
WHERE name LIKE 'mat%'
UNION ALL
SELECT name
FROM subjects
WHERE name LIKE '%mat%' AND name NOT LIKE 'mat%'

但我寧願不要使用LIKE

在這種情況下,MySQL 5.6中新的InnoDB全文搜索功能會有所幫助。 我使用以下查詢:

SELECT MATCH(column) AGAINST('(word1* word2*) ("word1 word1")' IN BOOLEAN MODE) score, id, column 
FROM table
having score>0
ORDER BY score 
DESC limit 10;

其中( )將單詞分組為一個子表達式。 第一組具有like word%含義; 第二個尋找確切的短語。 分數以浮點數形式返回。

一年后,我在這個(有點)重復的問題中獲得了很好的解決方案:

MySQL-如何獲得准確相關的搜索結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM