【问题标题】:Improving Mysql Match Against search改进 Mysql 匹配搜索
【发布时间】:2012-11-13 00:46:30
【问题描述】:

我一直在关注 Mysql 的 Match Against 搜索。结果很奇怪。例如,如果我有一个带有条目“education”的表属性并为“edu”进行搜索(使用匹配),那么它会找到它。但是,如果我搜索“educ”,则不会返回任何结果。一直到“教育”不返回结果。所以它只匹配整个单词,或者一个单词中匹配 3 个或更少的字母。

有没有办法改进它,以便在搜索词是属性中单词的子集时返回结果?例如。使用上面的示例,搜索“educat”将返回包含“Education”的行

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以通过匹配IN BOOLEAN MODE 并使用* 运算符来做您想做的事情。

    例如:

     ... MATCH(thing) AGAINST ('+educat*' IN BOOLEAN MODE)...
    

    + 告诉匹配只包含包含匹配项的 thing 的值,在这种情况下,所有索引值都以“educat”开头(请参阅 here 了解布尔模式的工作原理详细)。

    顺便说一句,默认情况下,MySQL 中的全文搜索不会索引 3 个或更少字符的单词,所以我怀疑你与“edu”的匹配没有像你想象的那样工作。查看ft_min_word_len 变量的值,看看是否是这种情况。

    【讨论】:

      【解决方案2】:

      您可以使用标记 %a(a=您的单词或字母)来搜索以相同单词或字母开头的任何单词 您可以使用 %a% 来搜索单词的开头和/或中间的部分 最后一个你可以使用以单词或字母结尾的%

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多