elk7.7.1【系列十二】elasticsearch 分组聚合查询

/**
     * 分组聚合
     *
     * @param index
     * @param boolQueryBuilder
     * @return
     */
    public Map<String, Long> getGroupByField(String index, BoolQueryBuilder boolQueryBuilder,String field) {
        Map<String, Long> map = new HashMap<String, Long>();
        try {
            getClient();
            SearchRequest searchRequest = new SearchRequest(index.split(","));
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            TermsAggregationBuilder gradeTermsBuilder = AggregationBuilders.terms("agg").field(field+".keyword");
            gradeTermsBuilder.size(20);//设置聚合结果组数
            if(boolQueryBuilder != null){
                searchSourceBuilder.query(boolQueryBuilder);
            }
            searchSourceBuilder.aggregation(gradeTermsBuilder);
            searchRequest.source(searchSourceBuilder).indicesOptions(IndicesOptions.lenientExpandOpen());
            //结果集
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            //获取搜索的文档结果
            Map<String, Aggregation> aggMap = response.getAggregations().getAsMap();
            ParsedStringTerms gradeTerms =  (ParsedStringTerms) aggMap.get("agg");
            List list = gradeTerms.getBuckets();
            for (Object object : list) {
                ParsedStringTerms.ParsedBucket obj = (ParsedStringTerms.ParsedBucket) object;
                String key = obj.getKeyAsString();
                long count = obj.getDocCount();
                map.put(key, count);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeClient();
        }
        return map;
    }

猜你喜欢

转载自blog.csdn.net/qq_29384639/article/details/108782107