DocumentType documentType = getDocumentType(queryCriteria);
SearchQuery queryJson = QueryHelp.getQueryJson(queryCriteria);
DateHistogramAggregationBuilder aggregationBuilder = getDateHistogram();
FiltersAggregationBuilder requestStateAgg = getRequestStateAgg();
//添加词聚合
aggregationBuilder.subAggregation(requestStateAgg);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryJson.getQuery())
.aggregation(aggregationBuilder);
String[] indices = {documentType.getIndex()};
SearchRequest searchRequest = new SearchRequest(indices,searchSourceBuilder);
try {
SearchResponse response = template.getClient().search(searchRequest, RequestOptions.DEFAULT);
ParsedDateHistogram aggregation = response.getAggregations().get(DATE_AGG);
List<? extends Histogram.Bucket> buckets = aggregation.getBuckets();
for (Histogram.Bucket bucket : buckets) {
System.out.println(bucket.getKeyAsString());
Filters serviceAgg = bucket.getAggregations().get(REQUEST_STATE_AGG);
for (Filters.Bucket serviceAggBucket : serviceAgg.getBuckets()) {
long docCount = serviceAggBucket.getDocCount();
String keyAsString = serviceAggBucket.getKeyAsString();
System.out.println("结果:"+keyAsString+" "+docCount);
}
}
} catch (IOException e) {
e.printStackTrace();
}
/**
* 词聚合
* @param field
* @param aggName
* @return
*/
private TermsAggregationBuilder getTermAgg(String field, String aggName) {
TermsAggregationBuilder termAgg = AggregationBuilders.terms(aggName)
.field(field)
.size(20);
return termAgg;
}
/**
* 日期聚合
* @return
*/
private DateHistogramAggregationBuilder getDateHistogram() {
DateHistogramAggregationBuilder aggregationBuilder = AggregationBuilders.dateHistogram(DATE_AGG)
.format(DATE_FORMAT)
.field(HANDEL_START_TIME)
.order(BucketOrder.key(true))
.dateHistogramInterval(DateHistogramInterval.DAY)
.timeZone(DateTimeZone.getDefault());
return aggregationBuilder;
}
/**
* 查询条件桶
* @return
*/
private FiltersAggregationBuilder getRequestStateAgg() {
RequestState[] requestStates = RequestState.values();
int length = requestStates.length;
MatchQueryBuilder[] builders = new MatchQueryBuilder[length];
for (int i = 0; i < requestStates.length; i++) {
RequestState state = requestStates[i];
MatchQueryBuilder requestStateQuery = getRequestStateQuery(state);
builders[i]=requestStateQuery;
}
FiltersAggregationBuilder filters = AggregationBuilders.filters(REQUEST_STATE_AGG, builders);
return filters;
}