【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » 教程 » 操作系统 » 正文

逐步聚合定义(逐步聚合四种方法)

放大字体  缩小字体 发布日期:2022-07-02 12:10:37    浏览次数:17

聚合操作,我们可以对数据进行分组的求和,求数,最大值,最小值,或者其它的自定义的统计功能,es对聚合有着不错的支持,需要注意的是,在对某字段进行聚合之后,需要开启这个字段的fielddata我,或者会出现如下错误:

Fielddata is disabled on text fields by default.

通过postman等工作像es api发送请求,可以将字段的这个特性打开.

PUT /esdto/esdto/_mapping{  "properties": {    "sex": {       "type":     "text",      "fielddata": true    }  }}


使用ElasticsearchTemplate对sex字段进行聚合

        // 创建一个查询条件对象        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();        // 拼接查询条件        queryBuilder.should(QueryBuilders.termQuery("creator", "1"));        // 创建聚合查询条件        TermsAggregationBuilder agg = AggregationBuilders.terms("sex").field("sex.keyword");//keyword表示不使用分词进行聚合        // 创建查询对象        SearchQuery build = new NativeSearchQueryBuilder()                .withQuery(queryBuilder) //添加查询条件                .addAggregation(agg) // 添加聚合条件                .withPageable(PageRequest.of(0, 10)) //符合查询条件的文档分页(不是聚合的分页)                .build();        // 执行查询        AggregatedPage<TestEsDto> testEntities = elasticsearchTemplate.queryForPage(build, TestEsDto.class);        // 取出聚合结果        Aggregations entitiesAggregations = testEntities.getAggregations();        Terms terms = (Terms) entitiesAggregations.asMap().get("sex");        // 遍历取出聚合字段列的值,与对应的数量        for (Terms.Bucket bucket : terms.getBuckets()) {            String keyAsString = bucket.getKeyAsString(); // 聚合字段列的值            long docCount = bucket.getDocCount();// 聚合字段对应的数量            log.info("keyAsString={},value={}", keyAsString, docCount);        }
 
(文/小编)
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:http://www.31duo.com/news/show-3605607.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4