es管道二次聚合查询转java

GET food/_search
{
  "size": 0, 
  "aggs": {
    "type_bucket": {
      //首先按照Type字段进行分桶
      "terms": {
        "field": "Type.keyword"
      },
      //因为要计算各个分桶的平均值,所以在分桶的基础上做指标聚合
      "aggs": {
        "price_bucket": {
          "avg": {
            "field": "Price"
          }
        }
      }
    },
    //这里通过buckets_path实现查找平均值最低的食物分类的桶
    "min_bucket":{
      "min_bucket": {
        "buckets_path": "type_bucket>price_bucket"
      }
    }
  }
}'

es管道二次聚合查询转java

SearchRequest searchRequest = new SearchRequest("food");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(0);
            TermsAggregationBuilder typeBucket = AggregationBuilders.terms("type_bucket").field("Type.keyword");
            TermsAggregationBuilder levelBucket = AggregationBuilders.terms("level_bucket").field("Level.keyword");
            AvgAggregationBuilder priceAvg = AggregationBuilders.avg("price_avg").field("Price");
            AvgBucketPipelineAggregationBuilder seller_num_agg_av = new AvgBucketPipelineAggregationBuilder("min_leve_bucket", "level_bucket>price_avg");
            levelBucket.subAggregation(priceAvg);
            typeBucket.subAggregation(levelBucket);
            typeBucket.subAggregation(seller_num_agg_av);
            searchSourceBuilder.aggregation(typeBucket);
            searchRequest.source(searchSourceBuilder);
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            Aggregation type_bucket = searchResponse.getAggregations().get("type_bucket");
            Terms.Bucket bucket = ((ParsedStringTerms) type_bucket).getBuckets().get(0);
            ParsedStringTerms level_bucket = bucket.getAggregations().get("level_bucket");
            Terms.Bucket bucket1 = level_bucket.getBuckets().get(0);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值