【问题标题】:Elasticsearch fuzzy query - max_expansionsElasticsearch 模糊查询 - max_expansions
【发布时间】:2018-04-26 02:23:22
【问题描述】:

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

模糊性,前缀长度。

但是,关于“max_expansions”,我不明白,我看了很多文章,但对我来说很难,因为关于它的例子很少。

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

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

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 个结果?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    引用Elasticsearch blog post:

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

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

    【讨论】:

    • 嗨@Piotr Pradzynski,我编辑了我的帖子,我试图做一个例子来理解你所说的。能举个例子吗?
    • 我确实按照你的解释进行了测试,就像你说的,ES 使用每个分片的这个值,我现在可以理解了,非常感谢!!!
    • 您好,我无法推断 max_expansions 的实际含义。由于分片设置为 4,max_expansions 设置为 1,每个分片 1 个模糊匹配应该是结果的一部分,因此总匹配应该是 4。但是找到的结果是 6?我问的原因是我面临一个非常相似的问题。对于这个问题,我面临另一个问题,我将 max_expansion 设置为 75,但它无法匹配两个不同索引上的两个结果(每个索引都有两个分片)。
    猜你喜欢
    • 2011-11-01
    • 2021-07-01
    • 2012-05-05
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多