|
@ -1,7 +1,6 @@
|
|
|
|
|
|
package com.yihu.quota.util;
|
|
|
|
|
|
import com.yihu.quota.vo.ViewDataModel;
|
|
|
import org.elasticsearch.action.search.SearchRequestBuilder;
|
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
|
import org.elasticsearch.client.transport.TransportClient;
|
|
@ -26,105 +25,6 @@ import java.util.*;
|
|
|
@Component
|
|
|
public class AggregationBuildHandler {
|
|
|
|
|
|
/**
|
|
|
* 简单聚合
|
|
|
* @param aggType 聚合类型
|
|
|
* @param aggName 聚合名称
|
|
|
* @param fieldName 聚合字段
|
|
|
* @return
|
|
|
*/
|
|
|
public AbstractAggregationBuilder addAggregationBuilder(String aggType,String aggName, String fieldName){
|
|
|
AbstractAggregationBuilder builder = null;
|
|
|
if(aggType.equals("sum")){
|
|
|
builder = AggregationBuilders.sum(aggName).field(fieldName);
|
|
|
}else if(aggType.equals("count")){
|
|
|
builder = AggregationBuilders.count(aggName).field(fieldName);
|
|
|
}else if(aggType.equals("avg")){
|
|
|
builder = AggregationBuilders.avg(aggName).field(fieldName);
|
|
|
}else if(aggType.equals("max")){
|
|
|
builder = AggregationBuilders.max(aggName).field(fieldName);
|
|
|
}else if(aggType.equals("min")){
|
|
|
builder = AggregationBuilders.min(aggName).field(fieldName);
|
|
|
}
|
|
|
return builder;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 分组后,简单聚合
|
|
|
* @param aggType 聚合类型
|
|
|
* @param aggName 聚合名称
|
|
|
* @param fieldName 聚合字段
|
|
|
* @return
|
|
|
*/
|
|
|
public AbstractAggregationBuilder addTermAggregationBuilder(String termName, String termFieldName,String aggType,String aggName, String fieldName){
|
|
|
AbstractAggregationBuilder builder = null;
|
|
|
TermsBuilder termsBuilder = addTermsBuilder(termName,termFieldName);
|
|
|
if(aggType.equals("sum")){
|
|
|
builder = termsBuilder.subAggregation(AggregationBuilders.sum(aggName).field(fieldName));
|
|
|
}else if(aggType.equals("count")){
|
|
|
builder = termsBuilder.subAggregation(AggregationBuilders.count(aggName).field(fieldName));
|
|
|
}else if(aggType.equals("avg")){
|
|
|
builder = termsBuilder.subAggregation(AggregationBuilders.avg(aggName).field(fieldName));
|
|
|
}else if(aggType.equals("max")){
|
|
|
builder = termsBuilder.subAggregation(AggregationBuilders.max(aggName).field(fieldName));
|
|
|
}else if(aggType.equals("min")){
|
|
|
builder = termsBuilder.subAggregation(AggregationBuilders.min(aggName).field(fieldName));
|
|
|
}
|
|
|
return builder;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加分组
|
|
|
* @param termName
|
|
|
* @param fieldName
|
|
|
* @return
|
|
|
*/
|
|
|
public TermsBuilder addTermsBuilder(String termName, String fieldName){
|
|
|
TermsBuilder termsBuilder= AggregationBuilders.terms(termName).field(fieldName);
|
|
|
return termsBuilder;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
* @param client
|
|
|
* @param boolQueryBuilder 查询的过滤条件
|
|
|
* @param aggBuilderList 聚合组
|
|
|
* 聚合组中成员是 单个的聚合查询,其中单个的聚合查询可以嵌套子聚合查询 如:
|
|
|
* 单个聚合 查询 :TermsBuilder firstAgg= AggregationBuilders.terms("player_count ").field("team");
|
|
|
* 带有子聚合的聚合查询 :
|
|
|
* TermsBuilder secondAgg= AggregationBuilders.terms("pos_count").field("position")
|
|
|
* .subAggregation(
|
|
|
* AggregationBuilders.dateHistogram("by_year").field("dateOfBirth").interval((DateHistogramInterval.YEAR))
|
|
|
* .subAggregation(
|
|
|
* AggregationBuilders.avg("avg_children").field("children")
|
|
|
* )
|
|
|
* );
|
|
|
* @return 结果集
|
|
|
*/
|
|
|
public List<Map<String, Object>> structAggregationQuery(TransportClient client,String index,String type,
|
|
|
BoolQueryBuilder boolQueryBuilder,
|
|
|
LinkedList<AbstractAggregationBuilder> aggBuilderList){
|
|
|
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index).setTypes(type).
|
|
|
setQuery(boolQueryBuilder);
|
|
|
for(AbstractAggregationBuilder aggBuilder : aggBuilderList){
|
|
|
searchRequestBuilder.addAggregation(aggBuilder);
|
|
|
}
|
|
|
SearchResponse response = searchRequestBuilder.execute().actionGet();
|
|
|
List<Map<String, Object>> resultList = new LinkedList<Map<String, Object>>();
|
|
|
Map<String, Aggregation> map = response.getAggregations().getAsMap();
|
|
|
for(String key:map.keySet()){
|
|
|
Aggregation aggregation = map.get(key);
|
|
|
parsingAggregation(resultList,aggregation);
|
|
|
}
|
|
|
client.close();
|
|
|
LinkedList<String> rowDimensionList = new LinkedList<>();
|
|
|
rowDimensionList.add("区县_terms");
|
|
|
LinkedList<String> columnDimensionList = new LinkedList<>();
|
|
|
columnDimensionList.add("性别_terms");
|
|
|
return convertList(resultList,rowDimensionList,columnDimensionList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 递归解析 json
|
|
|
* @param resultList
|