Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,它提供了强大的聚合功能,可以帮助你从大量数据中提取有价值的信息。以下是一些常见的 Elasticsearch 聚合操作:
-
指标聚合(Metric Aggregations):
count
:计算文档数量。sum
:对某个字段求和。avg
:计算某个字段的平均值。min
:找到某个字段的最小值。max
:找到某个字段的最大值。
-
桶聚合(Bucket Aggregations):
date_histogram
:按日期范围对文档进行分组。histogram
:按数值范围对文档进行分组。terms
:按字符串或数值字段对文档进行分组。filters
:基于多个过滤条件对文档进行分组。
-
嵌套聚合(Nested Aggregations):
- 用于处理嵌套对象类型的字段,将嵌套文档分组到父文档的层级结构中。
-
反嵌套聚合(Reverse Nested Aggregation):
- 用于从嵌套聚合的结果中返回到上一级的文档。
-
子聚合(Children Aggregations):
- 用于对具有父子关系的文档进行分组。
-
Missing 聚合(Missing Aggregation):
- 用于找出某个字段在文档中缺失的值。
-
Sampler 聚合(Sampler Aggregation):
- 用于从大型数据集中抽取一部分样本,以便更高效地进行聚合操作。
以下是一个简单的 Elasticsearch 查询示例,展示了如何使用 terms
和 avg
聚合:
GET /your_index_name/_search { "size": 0, "aggs": { "group_by_category": { "terms": { "field": "category.keyword" }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } }
在这个示例中,我们首先使用 terms
聚合按 category
字段的值对文档进行分组,然后在每个分组内计算 price
字段的平均值。
要执行这个查询,你可以使用 Elasticsearch 的 REST API 或者客户端库(如 Elasticsearch-Py、Elasticsearch-JS 等)。记得根据你的实际索引名称和字段名称调整查询中的 your_index_name
和字段名。