场景:查完总的,还得查询总的下面各个子公司条件的数量。
POST /report_*/_search
{
"size":0,
"query": {
"bool": {
"must": [
{
"range": {
"submitTime": {
"from": 1658505600000,
"to": 1658591999000,
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
}
],
"must_not": [
{
"terms": {
"partnerCode.keyword": [
"710000",
"810000",
"820000"
],
"boost": 1
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"aggregations": {
"submit_count": {
"terms": {
"field": "branchCode.keyword"
},
"aggregations": {
"take_count": {
"filters": {
"filters": [
{
"bool": {
"should": [
{
"term": {
"orderStatus": {
"value": "30"
}
}
}
]
}
}
]
}
}
}
}
}
}
代码需要利用for循环遍历
BoolQueryBuilder basicQuery = QueryBuilders.boolQuery(); basicQuery.must( QueryBuilders.rangeQuery("submitTime") .gte(starTime.getTime()) .lte(endTime.getTime()) ); BoolQueryBuilder orderStatusQuery = QueryBuilders.boolQuery(); orderStatusQuery.should(QueryBuilders.termQuery("orderStatus", "14")); orderStatusQuery.should(QueryBuilders.termQuery("orderStatus", "20")); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(basicQuery); searchSourceBuilder.size(0); String submitCount = "submit_count"; String takeCount = "take_count"; String partnerCount = "partner_count"; TermsAggregationBuilder branchCodeAgg = AggregationBuilders.terms(submitCount).field("parentBranchCode.keyword"); FiltersAggregationBuilder filtersAggregationBuilder = AggregationBuilders.filters(takeCount, orderStatusQuery); TermsAggregationBuilder partnerCodeAgg = AggregationBuilders.terms(partnerCount).field("partnerCode.keyword"); filtersAggregationBuilder.subAggregation(partnerCodeAgg); searchSourceBuilder.aggregation(branchCodeAgg.subAggregation(filtersAggregationBuilder)); SearchRequest searchRequest = new SearchRequest(fetchOrderReportIndexNames(starTime, endTime)); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = orderReportEsDAO.query(searchRequest); Listlist = new ArrayList<>(); start1 = System.currentTimeMillis(); ParsedStringTerms branchTerms = searchResponse.getAggregations().get(submitCount); for (Terms.Bucket parentBranchBucket : branchTerms.getBuckets()) { String parentBranchCode = (String) parentBranchBucket.getKey(); int submitNum=(int) parentBranchBucket.getDocCount(); ParsedFilters takeTerms = parentBranchBucket.getAggregations().get(takeCount); List extends Filters.Bucket> takeBucketsList=takeTerms.getBuckets(); if(takeBucketsList==null||takeBucketsList.size()<=0){ DtdManageFeeBill dtdManageFeeBill = new DtdManageFeeBill(); list.add(dtdManageFeeBill); continue; } for (Filters.Bucket takeCountBucket : takeBucketsList) { int takeNum=(int) takeCountBucket.getDocCount(); ParsedStringTerms partnerTerms = takeCountBucket.getAggregations().get(partnerCount); List extends Terms.Bucket> partnerTermsBucketList=partnerTerms.getBuckets(); if(partnerTermsBucketList==null||partnerTermsBucketList.size()<=0){ DtdManageFeeBill dtdManageFeeBill = new DtdManageFeeBill(); list.add(dtdManageFeeBill); continue; } for (Terms.Bucket partnerCountBucket : partnerTerms.getBuckets()) { String partnerCode = (String) partnerCountBucket.getKey(); int partnerNum=(int) partnerCountBucket.getDocCount(); DtdManageFeeBill dtdManageFeeBill = new DtdManageFeeBill(); list.add(dtdManageFeeBill); } } }