资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

es聚合统计

Java 更新时间: 发布时间: 计算机考试归档 最新发布

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

        }
    }

}

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1041105.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【es聚合统计】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2