Es7.x 分组聚合查询

DSL查询如下:
在这里插入图片描述
Java代码如下:

public class BankTest extends BaseTests{

    @Autowired
    @Qualifier("elasticsearchTemplate")
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    @Qualifier("elasticsearchClient")
    @Autowired
    private RestHighLevelClient restHighLevelClient;


    @Test
    public void testAgg() throws IOException {
        SearchRequest searchRequest = new SearchRequest("bank");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //根据state.keyword(州)分组,别名为state
        TermsAggregationBuilder state = AggregationBuilders.terms("state").field("state.keyword").size(200);
        //求平均工资
        AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("balance").field("balance");
        //最终聚合结果是:根据州分组,然后求每个州的平均工资
        TermsAggregationBuilder termsAggregationBuilder = state.subAggregation(avgAggregationBuilder);
        searchSourceBuilder.aggregation(termsAggregationBuilder);
        System.out.println("********************************************");
        System.out.println(searchSourceBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        //下面获得聚合查询
        Aggregations aggregations = search.getAggregations();
        for(Aggregation a:aggregations){
            Terms terms = (Terms) a;
            for(Terms.Bucket bucket:terms.getBuckets()){
                Avg balance = (Avg)bucket.getAggregations().asMap().get("balance");
                double value = balance.getValue();
                System.out.println(bucket.getKeyAsString()+"州的平均工资是"+value);
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值