开发者社区> 问答> 正文

MySQL match()对()-按相关性和按列排序?

好的,所以我试图在多列中进行全文搜索,就像这样简单:

SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE) 现在,我想按相关性排序(找到了多少个单词?),我已经可以使用以下方式进行处理:

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 现在这是我迷路的部分,我想在此head列中优先考虑相关性。

我想我可以创建两个相关性列,一个用于head,一个用于body,但是到那时,我将在表中进行三遍相同的搜索,而对于我要创建的函数,性能非常重要,因为查询将被联接并与其他表匹配。

因此,我的主要问题是,是否有更快的方法来搜索相关性并确定某些列的优先级?(作为奖励,甚至可能使相关性计数单词在列中出现的次数?)

任何建议或意见将是巨大的。

注意:我将在LAMP服务器上运行它。(本地测试中的WAMP)

展开
收起
保持可爱mmm 2020-05-11 17:02:52 590 0
1 条回答
写回答
取消 提交回答
  • 这可能会增加与所需头部的相关性。它不会使它加倍,但它可能对您而言足够好:

    SELECT pages.*, 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

    -- alternatively: ORDER BY title_relevance + relevance DESC 如果您具有切换数据库引擎的灵活性,那么您还想研究的另一种方法是Postgres。它允许设置运营商的权重并进行排名。来源:stack overflow

    2020-05-11 17:03:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像