具有相关性和列优先级的全文搜索的 MySQL 查询优化
使用 MySQL 的 MATCH 在多列中执行全文搜索时( ) 和 AGAINST() 函数中,用户经常需要按相关性对结果进行排序,同时对某些列进行优先级排序。虽然根据字数计算相关性很简单,但确定列相关性的优先级可能具有挑战性。
为了解决此问题,可以采用包含特定于列的相关性度量的修改查询。以下查询引入了新的权重因子,而不是创建额外的相关性列:
SELECT pages.*, MATCH (head, body) AGAINST ('some words') AS relevance, MATCH (head) AGAINST ('some words') * 2 AS title_relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words') ORDER BY title_relevance DESC, relevance DESC -- Alternatively: ORDER BY 0.5 * title_relevance + relevance DESC
在此修改后的查询中,头列中找到的单词的相关性加倍,从而有效地优先考虑相关性中的列计算。或者,可以应用自定义权重乘数来进一步微调优先级。
对于更高级的优先级和加权选项,请考虑探索替代数据库引擎,例如 Postgres,它提供了加权运算符和排名算法的广泛自定义.
以上是如何通过优先考虑特定列来优化 MySQL 全文搜索相关性?的详细内容。更多信息请关注PHP中文网其他相关文章!