gpt4 book ai didi

匹配所有单词的 MySQL 全文搜索查询仍然返回部分匹配

转载 作者:行者123 更新时间:2023-11-30 21:43:59 25 4
gpt4 key购买 nike

我遇到了与 this poster had 相同的问题,但是接受的答案并没有解决我的问题。基本上我试图将我的“标题”列与全文搜索查询中的所有单词匹配,但它仍然返回部分匹配项。我最近将我的 MySQL 数据库表转移到一个新的 Web 主机上,但我的全文搜索与在我的旧服务器上的表现不一样。我假设可能存在设置差异,但我似乎无法找到它。全文已启用,我的 ft_min_word_len 设置为 3,但以下 MySQL 查询仍在获得部分匹配:

SELECT title, MATCH (title) AGAINST ("more pink") AS relevance
FROM discography
WHERE MATCH (title) AGAINST ("+more +pink" IN BOOLEAN MODE)
ORDER BY relevance DESC

以上代码返回以下集合,前7个标题为:

Under The Pink & More Pink
Under The Pink Tour All Pass
Under The Pink Tour Guest Pass
Under The Pink Tour Aftershow Pass
Under The Pink Tour After Show Pass
Under The Pink
Under The Pink

如何省略部分匹配项?有什么我想念的吗?如果我将 SELECT 语句置于 bool 模式,结果会更糟,因为这会将相关性设置为二进制 1 或 0:

SELECT title, MATCH (title) AGAINST ("+more +pink" IN BOOLEAN MODE) AS relevance
FROM discography
WHERE MATCH (title) AGAINST ("+more +pink" IN BOOLEAN MODE)
ORDER BY relevance DESC

前 7 个标题是:

Under The Pink
Under The Pink
Under The Pink
Under The Pink
Under The Pink
Under The Pink
Under The Pink & More Pink

尽管使用了 + 运算符,但它似乎并没有缩小我的结果范围。欢迎任何帮助,在此先感谢您。

最佳答案

好吧,我现在觉得很傻。我的表使用 MyISAM,根据文档,“更多”在停用词列表中。所以这就是为什么该搜索在部分匹配上出现的原因。感谢大家的帮助。

编辑

如果有人对如何在自己的网站上编写自己的搜索引擎时如何“绕过”共享主机上的停用词列表感到好奇,我推荐一种与我用来绕过“ft_min_word_len”设置的类似技术。创建一个单独的搜索列,将您希望通过全文搜索的列中的所有值重复保存。创建一个存储所有 stopwords listed for your database type 的包含文件成一个数组。在将值保存到专用搜索列之前,循环遍历列值中的每个单词,并使用包含文件检查停用词数组中是否存在任何单词。如果任何值包含停用词,请在末尾的停用词上添加一个字符(我选择“z”)。然后,当触发搜索时,通过相同的停用词数组循环搜索词并检查是否有任何包含停用词。如果任何搜索词在停用词数组中,再次添加您选择添加到搜索列中停用词末尾的相同字符(在本例中为“z”)。遍历数组并对搜索词进行必要的更改后,您可以搜索专用搜索栏而不用担心您的停用词被忽略。当然,我不会将我的搜索栏用于任何显示目的,仅用于搜索。

关于匹配所有单词的 MySQL 全文搜索查询仍然返回部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314326/

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