在MySQL 多列全文搜尋中優先考慮相關性
在My 中,MATCH() AGAINST() 函數有助於全文搜尋跨多個列。預設情況下,搜尋相關性由所有指定列中符合術語的組合出現次數決定。但是,您可能會遇到需要根據特定欄位確定相關性優先順序的情況。
按列劃分的相關性
要實現這一點,您可以引入多個相關性列,一個正如您所提到的,對於每一列。雖然這種方法可以確保準確的優先級,但它也意味著冗餘搜索,從而影響效能。
最佳化相關性優先順序
平衡效能和相關性優先順序的另一種方法是調整相關性計算公式。以下是一個修改後的查詢,其中包含了頭列的權重係數:
SELECT * , MATCH (head, body) AGAINST ('some words') AS relevance, MATCH (head) AGAINST ('some words') AS title_weight FROM pages WHERE MATCH (head, body) AGAINST ('some words') ORDER BY (title_weight + relevance) DESC
此查詢為頭列的相關性得分分配了更高的權重。透過相應地調整權重,您可以根據特定列確定相關性的優先順序。
獎勵:計算單字出現次數
要計算每列中符合術語的出現次數,您可以可以在MATCH() 中使用BOOLEAN MODE 標誌:
SELECT * , MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance, MATCH (head) AGAINST ('some words' IN BOOLEAN MODE) AS title_count FROM pages WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) ORDER BY title_count DESC, relevance DESC
title_count 欄位指示如何多次在標題列中指定術語erscheinen。這些資訊有助於進一步優化您的搜尋結果。
注意:此方法適用於 MySQL 8.0 以上版本。對於舊版本,您可能需要探索替代方法來優先考慮相關性並計算術語出現次數。
以上是如何確定跨多列的 MySQL 全文搜尋的相關性優先順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!