Elasticsearch模糊查询 - 最大扩展数

6

我正在使用elasticsearch 5+,并且使用了一些模糊查询。

我了解了以下的模糊参数:

fuzziness、prefix_length。

但是,我无法理解"max_expansions"是什么意思。我阅读了许多文章,但由于缺少示例,这对我来说很难。

您能用示例来解释一下这个参数吗?它如何与fuzziness参数一起工作?

请看以下示例: 我执行了以下查询:

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

我有4个分片,我的查询发现了6个结果,因为“my-field”中有6个文档包含“hous”。 如果max_expansions类似于数据库中的限制,那么最大结果应该是4(因为我有4个分片)?为什么会返回6个结果?

1个回答

7

来自Elasticsearch博客文章的一句引用:

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

基本上,这意味着在 Elasticsearch 触发模糊查询时,在一步中它会限制搜索中考虑的术语数量到 max_expansions。就像数据库中的 limit 一样,它在 Elasticsearch 上的工作方式并不那么明显,因为它是在分片上运行的。可能只有在本地设置 Elasticsearch 只有一个分片并测试其行为时,您才能获得更多预期的结果。

嗨,@Piotr Pradzynski,我编辑了我的帖子,尝试做一个例子来理解你说的话。你能给个例子吗? - javaTry
我按照你的解释进行了测试,就像你所说的那样,ES使用每个分片的这个值,现在我能够理解了,非常感谢!!! - javaTry
嗨,我无法推断max_expansions的实际含义。由于分片设置为4且max_expansions设置为1,每个分片应该是结果的一部分,因此总匹配应该为4。但是找到的结果是6?我问的原因是我遇到了非常类似的问题。在这个问题中,我将max_expansion设置为75,但它仍然无法匹配存在于两个不同索引上的两个结果(每个索引都有两个分片)。 - Ronnie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接