从es聚合统计中获取统计结果封装到LinkedHashMap
public static LinkedHashMap<String,String> getValFromAggs( Map<String,Aggregation> aggsMap,String name,boolean isBucket,String key){
LinkedHashMap<String,String> resultMap =new LinkedHashMap<>();
if(aggsMap != null){
Iterator<Map.Entry<String,Aggregation>> it=aggsMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String,Aggregation> entry=it.next();
Aggregation aggregation = entry.getValue();
try{
if(aggregation instanceof ParsedNested || aggregation instanceof ParsedFilter || aggregation instanceof ParsedReverseNested) {
Class catClass = aggregation.getClass();
String aggName = catClass.getMethod("getName").invoke(aggregation, null).toString();
if(aggName.equals(name)){
String value = String.valueOf(catClass.getMethod("getDocCount").invoke(aggregation, null));
resultMap = new LinkedHashMap<>();
if(isBucket){
resultMap.put(key,value);
}else{
resultMap.put(name,value);
}
return resultMap;
}else{
Aggregations aggregations = (Aggregations)catClass.getMethod("getAggregations").invoke(aggregation, null);
resultMap = getValFromAggs(aggregations.asMap(), name,false,null);
if(resultMap != null && !resultMap.isEmpty()){
return resultMap;
}
}
}else if(aggregation instanceof ParsedStringTerms || aggregation instanceof ParsedLongTerms){
Class catClass = aggregation.getClass();
String aggName = catClass.getMethod("getName").invoke(aggregation, null).toString();
if(aggName.equals(name)){
}else{
LinkedHashMap<String,String> tempMap = new LinkedHashMap<>();
List<? extends Bucket> buckets = ( List<? extends Bucket>)catClass.getMethod("getBuckets").invoke(aggregation, null);
for (Terms.Bucket bucket : buckets) {
resultMap =getValFromAggs(bucket.getAggregations().asMap(), name,true,bucket.getKeyAsString());
if(resultMap != null && !resultMap.isEmpty()){
tempMap.putAll(resultMap);
}
}
if(tempMap != null && !tempMap.isEmpty()){
return tempMap;
}
}
}else {
logger.info(aggregation.getClass());
}
}catch (Exception e){
e.printStackTrace();
logger.error(ExceptionUtil.getStackTraceString(e));
}
}
}
return null;
}