Elasticsearch聚合引擎深入解析
1. 聚合引擎内部原理
在Elasticsearch中,聚合操作是基于查询返回的结果进行的。当我们在发送给Elasticsearch的请求中包含查询的聚合部分时,具体执行流程如下:
graph LR A[查询请求包含聚合部分] --> B[各相关分片执行聚合] B --> C[各分片返回部分结果] C --> D[负责节点等待所有部分结果] D --> E[负责节点合并结果] E --> F[输出最终结果]不过这种分布式系统的处理方式可能会影响结果的精度。例如,假设有三个分片,每个分片包含的文档中只有Elasticsearch和Solr这两个术语。当我们使用size=1进行terms聚合时,可能会得到不准确的结果。
需要注意的是,与查询相比,聚合操作对Elasticsearch的CPU周期和内存消耗要求更高。
2. 聚合类型
Elasticsearch 2.x支持三种聚合类型:
| 聚合类型 | 说明 |
| ---- | ---- |
| 指标聚合(Metrics) | 返回一个指标,如stats聚合 |
| 桶聚合(Buckets) | 返回桶,包含键和具有相同值、范围等的文档数量,如terms聚合 |
| 管道聚合(Pipeline)