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

  • 相关阅读:
    helm的使用
    SpotBugs检查java代码:不应该依赖平台默认编码(DM_DEFAULT_ENCODING)
    《c++程序设计》谭浩强课后习题答案 第三章
    [FineReport]安装与使用(连接Hive3.1.2)
    服务器数据恢复- Ext4文件系统分区挂载报错的数据恢复案例
    Zebec&Solana基金会AMA圆满召开,Lily Liu盛赞Zebec
    LTspice XVII > Transformer 变压器仿真
    媒体查询?
    Android系统10 RK3399 init进程启动(四十) 开机自启动脚本init.rc执行逻辑框架
    Vue脚手架Ⅲ(浏览器本地存储,Vue中的自定义事件,全局事件总线,消息订阅与发布(pubsub),nextTick,Vue封装的过度与动画)
  • 原文地址:https://blog.csdn.net/wuhenzhangxing/article/details/126224299