两个条件聚合分组:例如统计国家下的所有级别的数量
public void selectGroupBy() throws IOException {
SearchRequest searchRequest = new SearchRequest("my_index_v1").types("_doc");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
TermsAggregationBuilder aggregation = AggregationBuilders.terms("group_by_x").field("x");
TermsAggregationBuilder aggregation2 = AggregationBuilders.terms("group_by_z").field("z");
searchSourceBuilder.aggregation(aggregation.subAggregation(aggregation2));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Terms terms = searchResponse.getAggregations().get("group_by_x");
List<? extends Terms.Bucket> buckets = terms.getBuckets();
for (Terms.Bucket bucket : buckets) {
String id = bucket.getKey().toString();//id
Long docCount = bucket.getDocCount();//数量
System.out.println("==" + id + "------" + docCount);
Terms terms2 = bucket.getAggregations().get("group_by_z");
for (Terms.Bucket t2 : terms2.getBuckets()) {
String id2 = t2.getKey().toString();//id
Long docCount2 = t2.getDocCount();//数量
System.out.println("==" + id2 + "------" + docCount2);
}
}
}
对多个field求max/min/sum/avg:例如统计国家下的某个属性的max,min,sum,avg
public void selectGroupByMax() throws IOException {
SearchRequest searchRequest = new SearchRequest("my_index_v1").types("_doc");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
TermsAggregationBuilder aggregation = AggregationBuilders.terms("group_by_x").field("x");
//AggregationBuilder aggregation2 = AggregationBuilders.sum("sum_z").field("z");
// AggregationBuilder aggregation2 = AggregationBuilders.max("max_z").field("z");
// AggregationBuilder aggregation2 = AggregationBuilders.min("min_z").field("z");
AggregationBuilder aggregation2 = AggregationBuilders.avg("avg_z").field("z");
searchSourceBuilder.aggregation(aggregation.subAggregation(aggregation2));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Terms terms = searchResponse.getAggregations().get("group_by_x");
List<? extends Terms.Bucket> buckets = terms.getBuckets();
for (Terms.Bucket bucket : buckets) {
String id = bucket.getKey().toString();//id
Long docCount = bucket.getDocCount();//数量
System.out.println("==" + id + "------" + docCount);
Aggregations aggregations = bucket.getAggregations();
List<Aggregation> aggregations1 = aggregations.asList();
for (Aggregation agg:aggregations1){
// System.out.println("====" + agg.getName() + "------" + ((ParsedSum) agg).value());
// System.out.println("====" + agg.getName() + "------" + ((ParsedMax) agg).value());
// System.out.println("====" + agg.getName() + "------" + ((ParsedMin) agg).value());
System.out.println("====" + agg.getName() + "------" + ((ParsedAvg) agg).value());
}
}
}
借鉴于:https://www.cnblogs.com/chenyuanbo/p/9973311.html