(一)elasticsearch7.x之桶聚合javaAPI(通过team查询每个team中的最小年龄)

ElasticSearch7.X之桶聚合API教程

通过team查询每个team中的最小年龄

踩坑一:由于es7 API改动 下文注释地方不可用lambda表达式!获得value前必须先强转否则无法获取!
踩坑二:client没有了prepareSearch方法,所以必须按照文中方法调用API!

public void testQueryMinAgeByTeamName() throws IOException {
      SearchRequest searchRequest = new SearchRequest("nba");
      SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
      TermsAggregationBuilder field = AggregationBuilders.terms("teamName").field("teamName.keyword");
      //第二个聚合
      MinAggregationBuilder aggregation =
              AggregationBuilders
                      .min("age")
                      .field("age");

      TermsAggregationBuilder termsAggregationBuilder = field.subAggregation(aggregation);
      searchSourceBuilder.aggregation(termsAggregationBuilder);
      searchRequest.source(searchSourceBuilder);

      SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
      Aggregations aggregations = search.getAggregations();
      //此处不要用lambda表达式,因为下文注释es7,必须有这一步强转。
      //读者可以实验,会发现v处在lambda表达式中无法强转。
//      Terms terms = (Terms) aggregations ;
//      terms.getBuckets().forEach( bucket ->
//              bucket.getAggregations().asMap().forEach((k,v) ->
//                      System.out.println(bucket.getKeyAsString()+"---" +k + "->" + ((SingleValue)v).value()))
//      );

      for(Aggregation a:aggregations){
          Terms terms = (Terms) a;
          for(Terms.Bucket bucket:terms.getBuckets()){
              System.out.println("key is "+bucket.getKeyAsString());
              //这里是elasticsearch7的重大改动!!!!必须强转。
              Min age = (Min) bucket.getAggregations().asMap().get("age");
              double value = age.getValue();
              System.out.println("age is "+value);
          }
      }
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值