ES Pipeline Aggregation(管道聚合)

管道聚合处理来自其他聚合而不是文档集的输出,将信息添加到输出树中。

注:关于脚本聚合目前在本文中暂时不会涉及。

主要有如下两种管道聚合方式:

parent

sibling

下面一一介绍ES定义的管道聚合。

Avg Bucket 聚合

同级管道聚合,它计算同级聚合中指定度量的平均值。同级聚合必须是多桶聚合,针对的是度量聚合(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            
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值