场景:查完总的,还得查询总的下面各个子公司条件的数量。
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);
List list = 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);
}
}
}