布尔全文搜索排除短语AB-CD,例如-“A B C D”?

时间:2013-07-17 08:25:10

标签: mysql full-text-search boolean phrase

我有一个填充了某些值的表,例如

| CODE  | NAME        | NB: THIS IS A VERY BASIC EXAMPLE
| zygnc | oscar alpha |
| ab-cd | delta tiger |
| fsdys | delta bravo |

使用MySQL全文布尔搜索我想在此表中搜索包含'delta'的所有名称,但在其唯一代码'ab-cd'上排除第一个基本结果。此代码包含一个减号,这是一个要求,删除它是不可能的。

因此,我认为以下查询“应该”适用于此:

SELECT code, name
FROM items
WHERE MATCH (code, name)
AGAINST ('delta -"ab-cd"' IN BOOLEAN MODE)

但是,运行此查询不会产生所需的结果,因为结果仍包含具有要排除的代码的行,'ab-cd'。

这两个表的联盟设置为utf8_bin。

ft_min_word_len值设置为4.

有人可能会提出这种行为的原因,我认为它可能将字符串视为两个单独的值,例如: “-ab”,“ - cd”并且由于ft_min_word_len值为4,这两个字符串都不能产生任何结果吗?

我认为使用封装“”意味着第二个减号会被视为字面意思,但似乎并非如此。也许它与我不知道的桌联盟有关?

无论如何,非常感谢任何建议/意见/建议/反馈/指示,谢谢!!

1 个答案:

答案 0 :(得分:1)

您需要在my.cnf文件中更改变量ft_min_word_len的值。

默认情况下,ft_min_word_len的值为3.一旦更改了变量,就需要重新启动服务器。

这里“ab-cd”被视为两个单词“ab”和“cd”。所以最小字长与单词不匹配。