在 MySQL 多列全文搜索中优先考虑相关性
在 MySQL 中,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中文网其他相关文章!