Intro Elasticsearch Aggregation RestHighLevelApi Implement

Intro Elasticsearch Aggregation RestHighLevelApi Implement

這篇介紹Elasticsearch Aggregation RestHighLevelApi Implement。

接續上一篇在ElasticSearch做Sum Group By作為case轉成RestHighLevelApi:

KQL exmaple:
GET {index}-*/_search?size=0
{
“size”: 0,
“aggs”: {
“groupByField”: {
“terms”: {
“field”: “employee”
},
“aggs”: {
“summarySalary”: {
“sum”: {
“field”: “salary”
}
}
}
}
}
}

RestHighLevelApi exmaple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
sourceBuilder.size(ELKManager.MAX_REQUEST_SIZE);
sourceBuilder.query(queryBuilder);

String groupByName = "groupByField";
String sumName = "summarySalary";
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(groupByName).field("employee")
.order(BucketOrder.aggregation(sumName, false));
aggregationBuilder.subAggregation(AggregationBuilders.sum(sumName).field("salary"));
sourceBuilder.aggregation(aggregationBuilder);
sourceBuilder.size(0);
SearchResponse searchResponse = ELKManager.search(sourceBuilder, INDEX + "*");

if (searchResponse.getHits().getTotalHits().value > 0) {
Terms aggregation = searchResponse.getAggregations().get(groupByName);

aggregation.getBuckets().stream().map(x -> {
String employee = x.getKeyAsString();
Sum sum = x.getAggregations().get(sumName);
double summarySalary = sum.getValue();
System.out.println("employee:" + employee + " ; summarySalary:" + summarySalary);
});
}