springdata elasticsearch 聚合查询

es 库里边有一批数据,现在想查询一下这批数据有哪几种类型,并且每个类型下有多少条数据

springdata elasticsearch 聚合查询_第1张图片

对应实际的业务场景

 

springdata elasticsearch 聚合查询_第2张图片

 

代码如下:

public void searchPage() {
        //分页查询
        Pageable pageable= PageRequest.of(0,100);
        SearchQuery searchQuery=new NativeSearchQueryBuilder().
                withQuery(QueryBuilders.termQuery("aekoType","HutAeko"))
                .withPageable(pageable)
                .build();
        Page page=elasticsearchTemplate.queryForPage(searchQuery,EsAekoInfo.class);
        System.out.println("分页--------");
        SearchQuery groupQuery=new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchAllQuery())
                .addAggregation(AggregationBuilders.terms("aekoType").field("aekoType"))
                .build();
        Aggregations aggregations=elasticsearchTemplate.query(groupQuery, new ResultsExtractor() {
            @Override
            public Aggregations extract(SearchResponse response) {
                return response.getAggregations();
            }
        });
        Map aggregationMap = aggregations.asMap();
        StringTerms stringTerms = (StringTerms) aggregationMap.get("aekoType");
        //获得所有的桶
        List buckets = stringTerms.getBuckets();
        for(int i=0;i iterator = buckets.iterator();
        /*while(iterator.hasNext()) {
            //bucket桶也是一个map对象,我们取它的key值就可以了
            String name = iterator.next().getKeyAsString();//或者bucket.getKey().toString();
            //根据username去结果中查询即可对应的文档,添加存储数据的集
            long count=iterator.next().getDocCount();
        }*/
        System.out.println("聚合--------");

    }

查询结果如下:

springdata elasticsearch 聚合查询_第3张图片

可以看到,每种类型和该类型下的数量都查出来了

你可能感兴趣的:(elasticsearch)