依相關性排序的MySQL 搜尋結果
問題:
問題:討論:
初始查詢,SELECT word FROM Words WHERE word LIKE '%searchstring%' ORDER BY word ASC,按字母順序對結果進行排序,不帶任何字元搜尋字串在單字中的位置的偏好。為了解決這個問題,我們可以使用 MySQL 的 CASE 語句作為第一個排序方法,使用 LOCATE 函數作為第二種排序方法。
解:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 -- Starts with search string WHEN word LIKE '%searchstring' THEN 3 -- Includes search string ELSE 2 -- Does not include search string END
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Tie-breaker(可選):
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word), word
在多個單字共用一個位置的情況下進一步細化排序單詞,可以使用單字本身來新增輔助排序欄位:
結論:
透過採用這些技術,可以依照相關性對搜尋結果進行排序,優先匹配看起來更接近單字開頭的匹配。這提供了更直觀的用戶體驗並提高了搜尋功能的準確性。以上是如何最佳化 MySQL 搜尋以優先考慮搜尋字詞出現在 Word 中較早的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!