关于搜索:ElasticSearch中的模糊性设置

Fuzziness settings in ElasticSearch

我的搜索引擎需要一种方法来处理搜索字符串中的小的错字并仍然返回正确的结果。

根据ElasticSearch文档,存在三个与文本查询中的模糊匹配相关的值:模糊性,max_expansions和prefix_length。

不幸的是,关于这些参数的作用以及它们的合理值没有很多可用的详细信息。我确实知道模糊性应该是0到1.0之间的浮点数,而其他两个是整数。

有人可以为这些参数推荐合理的"起点"值吗?我确定我必须通过反复试验来进行调整,但是我只是在寻找适当的数值来正确处理错别字和拼写错误。


我发现在使用模糊查询来同时使用术语查询和模糊查询(具有相同术语)以检索拼写错误的结果时,这很有帮助,而且还可以确保输入的搜索词的实例出现在最高位置在结果中。

I.E.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
   "query": {
       "bool": {
           "should": [
                {
                   "match": {
                       "_all": search_term
                    }
                },
                {
                   "match": {
                       "_all": {
                           "query": search_term,
                           "fuzziness":"1",
                           "prefix_length": 2
                        }
                    }
                }
            ]
        }
    }
}

此处列出了更多详细信息:https://medium.com/@wampum/fuzzy-queries-ae47b66b325c


根据模糊查询(Fuzzy Query)文档,对于min_similarity(看起来像您的模糊性选项),默认值为0.5;对于max_expansions,默认值为" unbounded ";对于prefix_length,默认值为0

此答案应有助于您了解min_similarity选项。 0.5似乎是一个好的开始。

prefix_length和max_expansions将影响性能:您可以尝试使用默认值进行开发,但请确保它不会缩放(lucene开发人员甚至考虑将prefix_length设置为默认值2)。我建议运行基准测试以找到适合您特定情况的正确值。