按相關性對MySQL 結果進行排序:最佳匹配優先
在MySQL 資料庫中,即時搜尋功能通常涉及根據相關性對結果進行排序。預設情況下,結果按字母順序排序,但是如果我們想要對搜尋字串與單字開頭相符的結果進行優先排序呢?
為了實現這一點,我們可以利用CASE 語句和模式匹配來創建自訂order:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 WHEN word LIKE '%searchstring' THEN 3 ELSE 2 END
此查詢為搜尋字串出現在單字開頭的結果分配優先級1 ,為字串在單字內匹配的結果分配優先級3,為搜尋字串在單字中匹配的結果分配優先級2。
或者,為了根據匹配字串的位置進行排序,我們可以使用LOCATE 函數:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
此查詢根據搜尋位置對結果進行排序單字中的字串,優先考慮單字中較早找到的匹配項。
最後,如果多個單字與搜尋字串匹配,我們可以添加輔助排序規則用於按字母順序按每個優先級組內的結果進行排序:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
透過根據搜尋字串位置執行自訂排序,我們可以增強搜尋結果的相關性並改善使用者體驗。
以上是如何依相關性對 MySQL 搜尋結果進行排序:首先要匹配開始項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!