我有一个填充了某些值的表,例如
| 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,这两个字符串都不能产生任何结果吗?
我认为使用封装“”意味着第二个减号会被视为字面意思,但似乎并非如此。也许它与我不知道的桌联盟有关?
无论如何,非常感谢任何建议/意见/建议/反馈/指示,谢谢!!
答案 0 :(得分:1)
您需要在my.cnf文件中更改变量ft_min_word_len的值。
默认情况下,ft_min_word_len的值为3.一旦更改了变量,就需要重新启动服务器。
这里“ab-cd”被视为两个单词“ab”和“cd”。所以最小字长与单词不匹配。