本文介绍了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屋!