首頁 > 資料庫 > mysql教程 > 如何確定 MySQL 全文搜尋中列相關性的優先順序?

如何確定 MySQL 全文搜尋中列相關性的優先順序?

DDD
發布: 2024-11-30 19:25:13
原創
395 人瀏覽過

How Can I Prioritize Column Relevance in MySQL Full-Text Search?

使用match() 和against() 優先考慮MySQL 全文搜尋中的列相關性

在使用MySQL 的MATCH() AGAINST() 的全文搜尋中,按相關性對結果進行排序很簡單。但是,如果您想要優先考慮特定欄位(例如 head)的相關性,同時仍考慮其他欄位(例如 body)的相關性,該怎麼辦?

考慮這個初始查詢:

SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
登入後複製

它對 head 和 body 列執行全文搜索,傳回符合的行。

要依照相關性排序,我們可以加入一個計算的column:

SELECT *, MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance 
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY relevance
登入後複製

這引入了一個相關性列,指示每行的整體相關性。但是,它同等對待標題列和正文列。

要優先考慮標題列,一種方法是為其添加一個單獨的相關列:

SELECT *,
       MATCH (head, body) AGAINST ('some words') AS relevance,
       MATCH (head) AGAINST ('some words') AS title_relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY title_relevance DESC, relevance DESC
登入後複製

這將建立一個 title_relevance 列這僅代表標題列的相關性。透過先按 title_relevance 排序,然後按相關性排序,我們對具有高度相關的標題內容的行進行優先排序。

作為獎勵,我們可以修改ORDER BY 子句以考慮標題中指定單字的出現次數column:

ORDER BY title_relevance + (total_head_words * weight_per_word) DESC
登入後複製

這裡,total_head_words 表示單字出現在head 欄位中的次數,weight_per_word是一個乘數,調整它們的重要性。

或者,如果您可以靈活地使用 PostgreSQL,它可以為全文搜尋提供更高級的排名和加權功能。

以上是如何確定 MySQL 全文搜尋中列相關性的優先順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板