【问题标题】:Elasticsearch: Is having collapsed documents on the same shard improve performance while collapsing?Elasticsearch:在同一个分片上折叠文档是否会在折叠时提高性能?
【发布时间】:2019-09-30 16:32:32
【问题描述】:

Elasticsearch Parent/Child 嵌套关系通过在摄取期间使用 _routing 字段强制将父级和子级置于同一分片上。

我想知道在使用 elasticsearch 的 collapse 功能时,使用相同的过程是否会提高性能,还是会使其变得更糟?

如果我们同时查看这两种情况:

1) 路由到同一个分片:分片能够自行折叠并返回已经完全折叠的文档

2) 文档位于许多分片上:折叠只能在以后发生,所有分片返回大量稍后将折叠的文档。

我不知道 elasticsearch 是否会做第二个,即使文档在同一个分片上。

谢谢。

【问题讨论】:

    标签: performance elasticsearch


    【解决方案1】:

    字段折叠的完整起源(在 ES 5.3 中引入)可以在 PR 22337 (issue 21833) 中找到。

    最初的想法是创建一个新的top_groups 聚合,以terms+top_hits 组合为模型,但最终它被认为实施起来成本高昂且不一定是最佳的。

    字段折叠终于在搜索层中实现了,因为它可以从现有的查询/获取阶段中受益,并且比将其作为聚合执行所需的内存要少得多。分页也可以开箱即用。

    讨论过使用分组字段作为路由键是否是一个好主意,以确保所有热门命中都位于同一个分片上,但最终这被认为是一个太大的限制。

    所以,长话短说,在字段折叠的情况下,将所有文档定位在同一个分片上没有这样的限制,因为无论如何都会将提取请求(第 2 阶段)发送到所有分片。

    与往常一样,最好的方法是亲自尝试并衡量性能。

    • 1 个索引和 1 个分片(有和没有路由键)
    • 1 个索引和多个分片(有和没有路由键)

    我的看法是这不会有太大的不同,因为只有最热门的匹配项会被折叠,并且正常的搜索查询(没有字段折叠)无论如何也会经历两个查询/获取阶段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2013-09-20
      相关资源
      最近更新 更多