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)
回答:
这 可能 会增加与所需头部的相关性。它不会使它加倍,但它可能对您而言足够好:
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()对()-按相关性和按列排序? 的全部内容, 来源链接: utcz.com/qa/418271.html