全文索引 MySQL match() against() - 按相关性和列排序?

本文介绍了MySQL match() against() - 按相关性和列排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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)

推荐答案

可能增加与您想要的头部的相关性.它不会翻倍,但对您来说可能已经足够了:

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.它允许设置运营商的权重并调整排名.

这篇关于MySQL match() against() - 按相关性和列排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值