【发布时间】:2018-10-23 04:04:30
【问题描述】:
我遇到了与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 语句置于布尔模式,结果会更糟,因为这会将相关性设置为二进制 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
尽管使用了 + 运算符,但它似乎并没有缩小我的结果。欢迎任何帮助,非常感谢。
【问题讨论】:
-
不一定重要,但是您可以尝试使用单引号而不是双引号,例如使用
WHERE MATCH (title) AGAINST ('+more +pink' IN BOOLEAN MODE)? -
感谢@TimBiegeleisen 的想法。我尝试了您的建议,但仍然获得相同的结果。
-
我认为您应该尝试使您的问题可重现,因为您所看到的不应该发生。您确定您正确创建了全文索引吗?
-
我投了你一票,这是我能做的最多的事,因为我看不出你的逻辑有什么明显的问题。
-
很抱歉,无法在 mysql v5.5 或 5.7 中重现上述行为。我不知道有任何设置会改变 mysql 中 + 运算符的含义。
标签: mysql search full-text-search