首页 > 解决方案 > Elasticsearch 模糊查询 - max_expansions

问题描述

我正在使用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”的文档。如果 max_expansions 就像数据库中的限制一样,最大结果应该是 4(因为我有 4 个分片)?为什么返回 6 个结果?

标签: elasticsearch

解决方案


来自Elasticsearch 博客文章的引述:

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

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


推荐阅读