gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:52:54 26 4
gpt4 key购买 nike

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

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() - 按相关性和列排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com