【问题标题】:Boolean Full-Text Search Exclude Phrase AB-CD, e.g. -"AB-CD"?布尔全文搜索排除短语 AB-CD,例如-“A B C D”?
【发布时间】:2013-07-15 17:00:02
【问题描述】:

我有一个表格,其中填充了某些值,例如

| 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,这两个字符串都不能产生任何结果?

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

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

【问题讨论】:

    标签: mysql full-text-search boolean phrase


    【解决方案1】:

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

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

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

    【讨论】:

    • 目前,我们的托管服务提供商无法修改此值。在任何情况下,如果值设置为 3,“ab”的值将是 2,因此仍然不会产生任何结果?有没有办法强制mysql将其识别为包含5个值的文字字符串?
    • 我们不能将此变量用作动态变量。请参考dev.mysql.com/doc/refman/5.1/en/server-system-variables.html
    • 我认为这里的 ft_min_word_len 值没有任何问题。我尝试了这种情况,它对我来说非常有效。
    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多