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