赞
踩
管道聚合处理来自其他聚合而不是文档集的输出,将信息添加到输出树中。
注:关于脚本聚合目前在本文中暂时不会涉及。
主要有如下两种管道聚合方式:
parent
sibling
同级管道聚合,它计算同级聚合中指定度量的平均值。同级聚合必须是多桶聚合,针对的是度量聚合(metric Aggregation)。
示例如下:
1{
2 "avg_bucket": {
3 "buckets_path": "the_sum" // @1
4 }
5}
buckets_path:指定聚合的名称,支持多级嵌套聚合。
其他参数:
gap_policy
当管道聚合遇到不存在的值,有点类似于term等聚合的(missing)时所采取的策略,可选择值为:skip、insert_zeros。
skip:此选项将丢失的数据视为bucket不存在。它将跳过桶并使用下一个可用值继续计算。
insert_zeros:默认使用0代替。
format
用于格式化聚合桶的输出(key)。
示例如下:
1POST /_search 2{ 3 "size": 0, 4 "aggs": { 5 "sales_per_month": { // @1 6 "date_histogram": { 7 "field": "date", 8 "interval": "month" 9 }, 10 "aggs": { // @2 11 "sales": { 12 "sum": { 13 "field": "price" 14 } 15 } 16 } 17 }, 18 "avg_monthly_sales": { // @3 19 "avg_bucket": { 20 "buckets_path": "sales_per_month>sales" 21 } 22 } 23 } 24}
代码@1:首先定义第一级聚合(按月)直方图聚合。
代码@2:定义第二级聚合,在按月聚合的基础上,对每个月的文档求sum。
代码@3:对上面的聚合求平均值。
其返回结果如下:
1{ 2 ... // 省略 3 "aggregations": { 4 "sales_per_month": { 5 "buckets": [ 6 { 7 "key_as_string": "2015/01/01 00:00:00", 8 "key": 1420070400000, 9 "doc_count": 3, 10 "sales": { 11 "value": 550.0 12 } 13 }, 14 { 15 "key_as_string": "2015/02/01 00:00:00", 16 "key": 1422748800000, 17 "doc_count": 2, 18 "sales": { 19 "value": 60.0 20 } 21 } 22 ] 23 }, 24 "avg_monthly_sales": { // 这是对二级聚合的结果再进行一次求平均值聚合。 25 "value": 328.33333333333333 26 } 27 } 28}
对应的JAVA示例如下:
1public static void test_pipeline_avg_buncket_aggregation() { 2 RestHighLevelClient client = EsClient.getClient(); 3 try { 4 SearchRequest searchRequest = new SearchRequest(); 5 searchRequest.indices("aggregations_index02"); 6 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 7 AggregationBuilder aggregationBuild = AggregationBuilders.terms("seller_agg") 8 .field("sellerId") 9 .subAggregation(AggregationBuilders.sum("seller_num_agg") 10 .field("num") 11 ) 12 ; 13 sourceBuilder.aggregation(aggregationBuild); 14 15 // 添加 avg bucket pipeline 16 sourceBuilder.
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。