gpt4 book ai didi

MySQL FULLTEXT 搜索计数出现次数

转载 作者:行者123 更新时间:2023-11-28 23:58:20 26 4
gpt4 key购买 nike

我有办法获得全文搜索背后的逻辑

示例表

+----+-------------+
| id | title |
+----+-------------+
| 1 | Hello World |
| 2 | World World |
| 3 | Hello |
| 4 | Hello Hello |
+----+-------------+

这是查询

SELECT `title` FROM `example` WHERE MATCH(`title`) AGAINST('World')

结果

+-------------+
| title |
+-------------+
| World World |
| Hello World |
+-------------+

现在 'World World' 是第一个,因为它有 'World' 两次有什么办法可以得到这样的东西

+-------------+------------+-------+
| title | appearance | score |
+-------------+------------+-------+
| World World | 2 | 1 |
| Hello World | 1 | 2 |
+-------------+------------+-------+

最佳答案

我会尝试使用这样的语法,而不是尝试计算单词出现的次数。

请注意,它使用 IN BOOLEAN MODE,这意味着当 + 在前面时,它必须出现。 https://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

SELECT Title, MATCH(`title`) AGAINST ('+World +World' IN BOOLEAN MODE) AS Score 
FROM `example`
WHERE MATCH(`title`) AGAINST ('+World +World' IN BOOLEAN MODE)
ORDER BY Score DESC

它将生成一个相关性分数,您稍后可以根据该分数进行排序。

但是,如果您需要计数,这就可以了。

SELECT Title,
ROUND (
(CHAR_LENGTH(`title`) - CHAR_LENGTH(REPLACE(`title`, "World", ""))) / CHAR_LENGTH("World")
) AS appearance
FROM `example`
WHERE MATCH(`title`) AGAINST ('World')

请注意,它区分大小写,因此可以将 title 包装为 LCASE

关于MySQL FULLTEXT 搜索计数出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842942/

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