/**
* 分组聚合
*
* @param index
* @param boolQueryBuilder
* @return
*/
public Map<String, Long> getGroupByField(String index, BoolQueryBuilder boolQueryBuilder,String field) {
Map<String, Long> map = new HashMap<String, Long>();
try {
getClient();
SearchRequest searchRequest = new SearchRequest(index.split(","));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder gradeTermsBuilder = AggregationBuilders.terms("agg").field(field+".keyword");
gradeTermsBuilder.size(20);//设置聚合结果组数
if(boolQueryBuilder != null){
searchSourceBuilder.query(boolQueryBuilder);
}
searchSourceBuilder.aggregation(gradeTermsBuilder);
searchRequest.source(searchSourceBuilder).indicesOptions(IndicesOptions.lenientExpandOpen());
//结果集
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
//获取搜索的文档结果
Map<String, Aggregation> aggMap = response.getAggregations().getAsMap();
ParsedStringTerms gradeTerms = (ParsedStringTerms) aggMap.get("agg");
List list = gradeTerms.getBuckets();
for (Object object : list) {
ParsedStringTerms.ParsedBucket obj = (ParsedStringTerms.ParsedBucket) object;
String key = obj.getKeyAsString();
long count = obj.getDocCount();
map.put(key, count);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeClient();
}
return map;
}
elk7.7.1【系列十二】elasticsearch 分组聚合查询
猜你喜欢
转载自blog.csdn.net/qq_29384639/article/details/108782107
今日推荐
周排行