gpt4 book ai didi

MySQL 全文 : have a result weigh more

转载 作者:行者123 更新时间:2023-11-29 13:57:55 29 4
gpt4 key购买 nike

我有一个城市和州的数据库(大约 43,000 个)。我对其进行全文搜索,如下所示:

select city, state, match(city, state_short, state) against (:q in boolean mode) as score
from zipcodes where
match(city, state_short, state) against (:q in boolean mode)
group by city, state order by score desc limit 6

当我用有意义的字符串替换 :q 时,它可以工作,但是假设我搜索 houston texas,我希望结果是第一个,但相反这是第三个:

  • 德克萨斯州北休斯顿
  • 德克萨斯州南休斯顿
  • 德克萨斯州休斯顿

如何使德克萨斯州休斯顿比其他两个更重?对于其他类似的城市来说显然也应该是一样的。

编辑

这可行,有什么想法吗?

SELECT * FROM (
SELECT city, state, MATCH(city, state_short, state) AGAINST (:q IN BOOLEAN MODE) as score
FROM zipcodes
WHERE MATCH(city, state_short, state) AGAINST (:q IN BOOLEAN MODE)
GROUP BY city, state
ORDER BY score DESC LIMIT 6
) AS tbl
ORDER BY score DESC, LENGTH(city)

最佳答案

您的新查询可能有效,但这完全取决于情况。不是执行 ORDER BY LENGTH(city),而是使用 ORDER BY ABS(LENGTH(:q) - (LENGTH(city) + LENGTH(state))) 之类的方法更好的。这并不完美,但它应该更好,因为任何与输入长度相同且得分高的东西可能就是您正在寻找的。最终的查询将如下所示:

SELECT city, state, MATCH(city, state_short, state) AGAINST (:q IN BOOLEAN MODE) AS score
FROM zipcodes
WHERE MATCH(city, state_short, state) AGAINST (:q IN BOOLEAN MODE)
GROUP BY city, state
ORDER BY score DESC, ABS(LENGTH(:q) - (LENGTH(city) + LENGTH(state))) DESC LIMIT 6

我将新的 ORDER BY 子句移至主查询中以删除子查询。这应该会产生相同(或更准确)的结果。

编辑距离可能是一个更准确的测量方法,但 MySQL 中没有它的本地实现。 This post有关于 Levenshtein Distance 函数的 MySQL 实现的更多信息。

关于MySQL 全文 : have a result weigh more,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15537264/

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