List<Map<String, Object>> aggList = Lists.newLinkedList();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
RangeQueryBuilder timeRangeBuilder = QueryBuilders.rangeQuery("time").lte(timeTo).gte(timeFrom);
boolQuery.filter(timeRangeBuilder);
if (! Strings.isNullOrEmpty(nav)) {
boolQuery.must(QueryBuilders.termQuery("nav", nav));
}
boolQuery.must(QueryBuilders.termQuery("key", key));
SumBuilder totalCountAgg = AggregationBuilders.sum("totalCount").field("totalCount");
SumBuilder successCountAgg = AggregationBuilders.sum("successCount").field("successCount");
SumBuilder failCountAgg = AggregationBuilders.sum("failCount").field("failCount");
TermsBuilder aggBuilder = AggregationBuilders
.terms("stat")
.field("value")
.size(0)
.order(Terms.Order.aggregation("totalCount", false))
.subAggregation(totalCountAgg)
.subAggregation(successCountAgg)
.subAggregation(failCountAgg);
SearchRequestBuilder builder = ElasticSearchHelper.newBuilder(LOG_STATISTIC_INDEX);
SearchResponse response;
try {
response = builder.setQuery(boolQuery)
.addAggregation(aggBuilder)
.get();
} catch (Exception e) {
LOG.error("Cannot get aggregations for nav {} and key {}", nav, key, e);
}