0

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

| 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”的行。

这两个表的 Coalition 都设置为 utf8_bin。

ft_min_word_len 值设置为 4。

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

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

无论如何,任何建议/建议/输入/反馈/方向将不胜感激,谢谢!

4

1 回答 1

1

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

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

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

于 2013-07-17T09:04:37.640 回答