引擎盖下的 Elasticsearch 统计和总和聚合

Elasticsearch Stats and Sum Aggregation under the hood

我想了解弹性搜索在统计聚合和总和聚合方面的工作原理。

我的用例需要日期直方图聚合作为主要聚合,需要求和聚合或统计聚合作为嵌套聚合。我在 Kibana 中对相同数量的数据使用这两种聚合来执行查询。两个查询执行的时间相似。因此,对于我们所有的用例,如果统计和总和聚合之间没有性能差异,我们可能会一直使用统计聚合。

我找不到有关这些聚合内部工作的任何详细信息。请求向我提供有关它的任何信息,或向我指出任何描述这些聚合如何在幕后工作的文档。

Elasticsearch 版本:7.1

谢谢

如有疑问,go to the source

如果您查看 StatsAggregator.java and SumAggregator.java 的实现,您会发现它们非常相似。

SumAggregator 只计算总和,而 StatsAggregator 计算总和、最小值、最大值、计数和平均值。尽管后者似乎做了更多的工作,但它也只对数据进行一次迭代以计算额外的指标,但这些计算在计算上并不昂贵。

因此,如果您知道您只需要总和,请使用 SumAggregator,但如果您还需要最小值、最大值、计数或平均值,则转而使用 StatsAggregator,这样您只需迭代一次数据。