原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/getting-started-aggregations.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/getting-started-aggregations.html
本地英文版地址: ../en/getting-started-aggregations.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
Elasticsearch 聚合使你能够获取有关搜索结果的元信息,并能回答诸如“德克萨斯州有多少帐户持有人”或“纳西州的平均帐户余额是多少?”这样的问题。 你可以在一个请求中搜索文档、过滤命中并能使用聚合分析结果。
比如,下面这个请求使用一个 terms
聚合将索引 bank
中的所有账户按州分组,并按降序返回账户最多的前 10 个州。
GET /bank/_search { "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state.keyword" } } } }
响应中的 桶 (buckets)
是字段 state
的值。
doc_count
显示每个州的账户数量。
比如,你可以看到在 ID
(Idaho) 州有 27 个账户。
因为请求中设置了 size=0
,所以响应中只包含聚合的结果(译者注: aggregations部分有数据,而hits.hits为空)。
{ "took": 29, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped" : 0, "failed": 0 }, "hits" : { "total" : { "value": 1000, "relation": "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "group_by_state" : { "doc_count_error_upper_bound": 20, "sum_other_doc_count": 770, "buckets" : [ { "key" : "ID", "doc_count" : 27 }, { "key" : "TX", "doc_count" : 27 }, { "key" : "AL", "doc_count" : 25 }, { "key" : "MD", "doc_count" : 25 }, { "key" : "TN", "doc_count" : 23 }, { "key" : "MA", "doc_count" : 21 }, { "key" : "NC", "doc_count" : 21 }, { "key" : "ND", "doc_count" : 21 }, { "key" : "ME", "doc_count" : 20 }, { "key" : "MO", "doc_count" : 20 } ] } } }
你可以组合聚合以构建更复杂的数据摘要。
比如,下面这个请求在前一个 group_by_state
聚合中嵌套一个 avg
聚合,以计算每个状态的平均账户余额。
GET /bank/_search { "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state.keyword" }, "aggs": { "average_balance": { "avg": { "field": "balance" } } } } } }
与按结果的计数排序不同,你可以使用嵌套聚合的结果进行排序,方法是在 terms
聚合中指定顺序:
GET /bank/_search { "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state.keyword", "order": { "average_balance": "desc" } }, "aggs": { "average_balance": { "avg": { "field": "balance" } } } } } }
除了这些基本的桶(bucket) 和 度量聚合(metrics aggregation) 之外,Elasticsearch 还提供了专门的聚合,用于操作 多字段(multiple fields) 和分析特定类型的数据,如日期、IP地址和地理数据。 你还可以将单个聚合的结果输入管道聚合以进行进一步分析。
聚合提供的核心分析功能支持高级特性,比如使用机器学习来检测异常。