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