Elasticsearch模糊查询 - max_expansions

时间:2018-04-26 02:23:22

标签: elasticsearch

我正在使用elasticsearch 5+,我使用模糊进行了一些查询。 我理解了以下模糊参数:

模糊,prefix_length。

但是,我无法理解" max_expansions",我读过很多文章,但这对我来说很难,因为很少有例子。

你能用例子解释一下这个参数吗?它如何一起工作模糊参数?

写一个例子: 我做了这个查询:

GET my-index/my-type/_search
{
  "query": {
    "fuzzy": {
      "my-field": {
        "value": "house",
        "fuzziness": 1,
        "prefix_length": 0,
        "max_expansions": 1
      }
    }
  }
}

我有4个分片,我的查询找到了6个结果,因为有6个文件" hous"在" my-field"。 如果max_expansions就像数据库中的限制一样,最大结果应该是4(因为我有4个分片)?为什么要返回6个结果?

1 个答案:

答案 0 :(得分:0)

来自Elasticsearch blog post的引用:

  

max_expansions设置定义了模糊查询在停止搜索之前将匹配的最大术语数,也会对模糊查询的性能产生显着影响。但是,减少查询字词会产生负面影响,因为查询提前终止可能无法找到某些有效结果。重要的是要理解max_expansions查询限制在分片级别起作用,这意味着即使设置为1,多个术语也可能匹配,所有术语都来自不同的分片。此行为可能使max_expansions看起来好像没有生效,因此请注意,计算返回的唯一术语不是确定max_expansions是否正常工作的有效方法。

基本上,这意味着当Elasticsearch触发模糊查询时,在一个步骤内,它会将搜索中考虑的术语数量限制为max_expansions。正如它所写的那样,它不像数据库中的limit那么明显,因为在这里,在Elasticsearch中它正在处理分片。可能更多的预期结果是,您只需在本地使用一个分片设置Elasticsearch并测试行为。