【问题标题】:MySQL Search Query - "Keep" not workingMySQL 搜索查询 - “保持”不起作用
【发布时间】:2014-07-25 09:53:21
【问题描述】:

我对我们使用了一段时间的后续查询有点困惑,以下工作

搜索查询“火”

SELECT product FROM product_descriptions WHERE MATCH(product) AGAINST('+fire*' IN BOOLEAN MODE) LIMIT 5

返回

Fire Storage 31020 S1 E
Fire Storage 31020 S1 K
Fire Storage 31021 S1 E
Fire Storage 31021 S1 K
Fire Storage 31022 S1 E

但是下面的搜索查询“keep”

SELECT product FROM product_descriptions WHERE MATCH(product) AGAINST('+keep*' IN BOOLEAN MODE) LIMIT 5

不返回任何结果,但是我们在表格中有产品,例如“防火门保持关闭标志”、“保持清晰标志”

到目前为止,我发现唯一不起作用的词是“保持”这个词

以下搜索工作“钢”,“门”,因为我认为这可能是双字符的问题

【问题讨论】:

    标签: php mysql sql search product


    【解决方案1】:

    保持是一个停用词

    Wikipedia:

    在计算中,停用词是在之前被过滤掉的词,或者 之后,处理自然语言数据(文本)。 [...] 一些工具 特别是避免删除它们以支持短语搜索。任何组 的单词可以选择作为给定目的的停用词。对于一些 搜索机,这些是一些最常见的,简短的功能 单词,例如 the、is、at、which 和 on。在这种情况下,停用词 在搜索包含它们的短语时可能会导致问题, 特别是在诸如“The Who”、“The The”或“Take That”之类的名称中。 其他搜索引擎会删除一些最常见的词——包括 词汇,例如“想要”——来自查询以改进 性能。

    http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html

    您可以在 storage/myisam/ft_static.c 文件中找到实际使用的列表。

    这一事实在 http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

    您可能想改用 Lucene。 它的停用词列表要小得多,而且您可以完全删除它们:
    How to instruct StandardAnalyzer in Lucene to not to remove stop words?

    或者你可以添加

    ft_stopword_file = ""
    

    或链接一个空文件“empty_stopwords.txt” 到您的 .cnf/my.ini 文件,重新启动 mysql 引擎并重建索引:

    此外,如果您还没有准备好,请将最小单词降低到 3 (ft_min_word_len=3) 以便能够搜索 3 个字母的单词。

    较短的词 (3,2) 会显着增加查询时间,尤其是在全文索引列字段很大的情况下。

    【讨论】:

    • 谢谢!已经用min word了,还以为是这样的。
    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2017-08-09
    • 2023-04-09
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2015-07-09
    相关资源
    最近更新 更多