【问题标题】:Boolean search ignoring word忽略单词的布尔搜索
【发布时间】:2010-11-13 17:58:39
【问题描述】:

我已经进行了很多成功的布尔搜索,但是 1 个单词似乎阻止了它显示预期的结果。

您可以在下面看到顶部的表格结构,特别注意此测试产品的标签内容。

截图太小的文本代码:

SELECT 
        id,
        name,
        description,
        price,
        image 
    FROM 
        products 
    WHERE           
        MATCH(tags,name,description)
        AGAINST ('hot*' IN BOOLEAN MODE)

如果我搜索标签之一的“热”,它会返回 0 个结果。

但是,如果我搜索另一个标签“drink”,它会找到产品!

我似乎无法理解为什么!

【问题讨论】:

    标签: mysql boolean


    【解决方案1】:

    如果我搜索标签之一的“热”,它会返回 0 个结果。

    默认情况下,MySQL 不会索引(和搜索)长度小于 4 字符的单词。

    如果您想对它们进行索引并重建索引,请减小 @@ft_min_word_len

    【讨论】:

    • 顺便说一句,要@AlexCrooks 在您的环境中对此进行测试,请在搜索词中添加“bite”并重试(“bite”是一个四个字母的单词,也是“pink”,“ blue" 等 ;] .. 但这样你就可以向自己证明这是问题所在。)
    • @meder 读懂了我的想法,我的第二条评论将是 @Quassnoi ~ 这适用于 MSSQL、ORA 还是 Postgresql?
    • @drachenstern: 不,这是MySQL 的具体限制,并且仅存在于默认设置中。
    • @drachenstern:然而,几乎所有全文引擎都支持停用词、断词器和词干分析器,这会导致不明显的错误命中/未命中。
    • 该死的我的主机不会改变那个值:(
    【解决方案2】:

    确保“hot”不是stop word(它不是默认的停用词,但也许你的mysql实现出于某种原因有它?)并且“hot”不是太短的词(@987654322 @ ft_min_word_len 为 4,因此少于 4 个字母的单词将被忽略,除非它们与截断 * 运算符匹配,因此虽然 hot 会被忽略,但 hott 不会,请参阅:here)

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 2013-06-22
      • 2015-02-14
      • 2020-01-21
      • 1970-01-01
      • 2019-06-09
      • 2014-06-06
      • 1970-01-01
      相关资源
      最近更新 更多