gpt4 book ai didi

mysql - 排序 mysql MATCH() AGAINST() 相关性,完整数学位于顶部

转载 作者:行者123 更新时间:2023-11-29 10:33:37 25 4
gpt4 key购买 nike

今天我在使用 mysql MATCH()...AGAINST() 时遇到了问题。

因为我想解决我的问题可能更容易,所以我创建了一个小 SQLFiddle .

我完全理解,为什么“Foo Bar Foo”在这个 Select 语句的工作方式中比“Foo Bar”更相关。但我想要的是,“完全匹配”术语的相关性高于“完全匹配和更多”术语。

title         relevance
Foo Bar 0.046829063445329666
Foo Bar Foo 0.031219376251101494
Foo 0
Bar 0

如果不使用“union”组合两个语句,这个结果是否可能?

答案(感谢戈登·利诺夫):

SELECT *
FROM FOOBAR
WHERE title LIKE '%Foo Bar%'
ORDER BY (CASE WHEN title LIKE 'Foo Bar%' THEN 1 ELSE 0 end) DESC,
MATCH (title) AGAINST ('Foo Bar' IN BOOLEAN MODE) ASC

最佳答案

您可以在order by中执行您想要的操作。一种方法是计算匹配的不同单词的数量,然后在每个组中按相关性升序排列:

SELECT fb.*,
MATCH (title) AGAINST ('+Foo +Bar' IN BOOLEAN MODE) AS relevance
FROM FOOBAR fb
ORDER BY ((case when title like '%Foo%' then 1 else 0 end) +
(case when title like '%Bar%' then 1 else 0 end)
) desc,
relevance asc

这可以满足您对示例数据的要求。一般情况下可能不起作用,因为相关性计算除了单词匹配的次数和字符串的长度之外还有其他因素。

关于mysql - 排序 mysql MATCH() AGAINST() 相关性,完整数学位于顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46909786/

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