首页 > 数据库 > mysql教程 > 如何确定 MySQL 全文搜索中列相关性的优先级?

如何确定 MySQL 全文搜索中列相关性的优先级?

DDD
发布: 2024-11-30 19:25:13
原创
311 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板