MySQL搜索查询 - “保持”不工作

时间:2014-07-25 09:53:22

标签: php mysql sql search product

我对我们已经使用了一段时间的后续查询感到困惑,以下工作

搜索" fire"

的查询
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

但是以下搜索查询"保持"

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

不返回任何结果,但我们在表格中有产品,例如" Fire Door Keep Shut Sign"," Keep Clear Sign"

到目前为止,我发现的唯一不起作用的是工作"保持"

以下搜索工作" steel"," door"因为我认为它可能是双字符的问题

1 个答案:

答案 0 :(得分:3)

Keep是一个停止词

Wikipedia

  

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

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

StopWords

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

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

StopW

您可能想要使用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)会大大增加查询时间,尤其是在全文索引列字段很大的情况下。