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);
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/GoSaint/article/details/107520188