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

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

DDD
發布: 2024-12-01 03:59:13
原創
986 人瀏覽過

How Can I Prioritize Relevance in MySQL Full Text Search Across Multiple Columns?

MySQL 全文搜尋:最佳化相關性和列優先權

在多個表格中執行全文搜尋時,通常需要對相關性結果。 MySQL 的 MATCH() AGAINST() 函式提供了一種有效的方法來實現此目的。

但是,有時會出現對特定列中的相關性進行優先排序至關重要的情況。舉例來說,我們有一個包含帶有標題列和正文列的頁面的表,我們希望為標題列中找到的匹配項提供更高的優先權。

解決方案:合併特定於列的相關性

為了滿足此要求,我們可以利用附加的MATCH() 子句來單獨計算頭列的相關性。透過將其與整體相關性結合,我們可以對符合整體搜尋條件和指定列的結果進行優先排序。

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

在此查詢中,我們計算整體相關性(相關性)和標題列 -具體相關性(head_relevance)。透過先按 head_relevance 降序 (DESC) 對結果進行排序,然後再按相關性降序排列,我們可以有效地對 head 列中找到的匹配項進行優先排序。

獎勵:計算搜尋字詞的出現次數

雖然上述方法增強了列優先級,但它沒有提供搜尋字詞出現次數的計數在指定的列內。為了實現這一點,我們可以使用FULLTEXT() 和LENGTH() 函數:

...
SELECT pages.*,
       MATCH(head, body) AGAINST('some words') AS relevance,
       MATCH(head) AGAINST('some words') AS head_relevance,
       LENGTH(head) - LENGTH(REPLACE(head, 'some words', '')) AS head_count,
       LENGTH(body) - LENGTH(REPLACE(body, 'some words', '')) AS body_count
FROM pages
...
登入後複製

這擴展了前面的查詢來計算頭部(head_count) 和正文(body_count) 中搜尋字詞出現的計數

其他選項:Postgres和加權

如果適合您的項目,Postgres 提供高級功能,可以更好地控制相關性排名。其搜尋功能支援對特定術語或運算符進行加權,從而可以更好地自訂搜尋結果。

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

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