Elasticsearch是一个高性能、可伸缩的分布式全文搜索和分析引擎,支持聚合查询功能。聚合查询是一种将搜索结果进行分组并计算聚合度量的方法,可以实现统计分析、数据挖掘等复杂查询需求。本文将剖析Elasticsearch聚合查询的原理。
聚合查询的基本概念
在 Elasticsearch 中,聚合查询是由聚合器(Aggregator)构成的。聚合器是一种计算文档集合中某些属性的统计信息的组件。它们可以嵌套在一起形成复杂的聚合查询。聚合查询的结果可以作为一个或多个值返回给用户,也可以作为一个或多个分桶(Bucket)返回给用户。分桶是一种将文档按照某些属性进行分组的方法。每个分桶包含一个文档集合,该文档集合符合某些过滤条件。
聚合查询类型
在 Elasticsearch 中,聚合查询可以分为以下几类:
指标聚合器
指标聚合器(Metric Aggregator)用来计算文档属性的统计信息,如最小值、最大值、平均值、总和、数量等等。指标聚合器包括:
- Avg Aggregation:计算文档属性的平均值。
- Cardinality Aggregation:计算文档属性的基数(即不同值的数量)。
- Max Aggregation:计算文档属性的最大值。
- Min Aggregation:计算文档属性的最小值。
- Sum Aggregation:计算文档属性的总和。
- Value Count Aggregation:计算文档属性的值数量。
桶聚合器
桶聚合器(Bucket Aggregator)用来将文档集合分成多个桶,每个桶都符合某些过滤条件。桶聚合器包括:
- Date Histogram Aggregation:按时间段将文档分成多个桶。
- Date Range Aggregation:按时间范围将文档分成多个桶。
- Geo Distance Aggregation:按地理位置将文档分成多个桶。
- Geo Hash Grid Aggregation:按地理位置的格子将文档分成多个桶。
- Histogram Aggregation:按数字范围将文档分成多个桶。
- Range Aggregation:按数字范围将文档分成多个桶。
- Terms Aggregation:按文档属性将文档分成多个桶。
管道聚合器
管道聚合器(Pipeline Aggregator)用来将其他聚合器的结果作为输入,计算新的聚合结果。管道聚合器包括:
- Average Bucket Aggregation:计算每个桶中文档属性的平均值。
- Bucket Script Aggregation:使用自定义脚本计算桶的聚合结果。
- Bucket Selector Aggregation:根据自定义条件过滤桶。
- Derivative Aggregation:计算桶聚合器结果的一阶导数。
- Max Bucket Aggregation:找到某个桶聚合器结果最大的桶。
- Min Bucket Aggregation:找到某个桶聚合器结果最小的桶。
- Sum Bucket Aggregation:计算某个桶聚合器结果的总和。