• es聚合统计


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


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

  • 相关阅读:
    2022第四季度的机遇,Genesis Universe限量卡牌争夺战开启
    低代码平台 JNPF快速开发平台 框架源码
    NPM 常用命令(九)
    搭建游戏要选什么样的服务器?
    关于@Autowired
    SQL—数据库查询语言,全面详解演示,入门进阶必会
    SSM+阳光大学宿舍管理系统 毕业设计-附源码211714
    PHP代码审计13—弱类型
    Unity获取脚本的CustomEditor(自定义编辑)数据
    设计模式-代理模式
  • 原文地址:https://blog.csdn.net/wuhenzhangxing/article/details/126224299