es聚合统计

场景:查完总的,还得查询总的下面各个子公司条件的数量。

还需要设置bucket对应的size


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<DtdManageFeeBill> 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);

        }
    }

}

猜你喜欢

转载自blog.csdn.net/wuhenzhangxing/article/details/126224299