estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
[數據庫]es~通過ElasticsearchTemplate進行聚合操作
0
2020-08-24 17:00:38
聚合操作,我們可以對數據進行分組的求和,求數,最大值,最小值,或者其它的自定義的統(tǒng)計功能,es對聚合有著不錯的支持,需要注意的是,在對某字段進行聚合之后,需要開啟這個字段的fielddata我,或者會出現如下錯誤:Fielddata is disabled on text fields by default.
通過postman等工作像es api發(fā)送請求,可以將字段的這個特性打開.PUT /esdto/esdto/_mapping{ "properties": { "sex": { "type": "text", "fielddata": true } }}
使用ElasticsearchTemplate對sex字段進行聚合// 創(chuàng)建一個查詢條件對象 BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); // 拼接查詢條件 queryBuilder.should(QueryBuilders.termQuery("creator", "1")); // 創(chuàng)建聚合查詢條件 TermsAggregationBuilder agg = AggregationBuilders.terms("sex").field("sex.keyword");//keyword表示不使用分詞進行聚合 // 創(chuàng)建查詢對象 SearchQuery build = new NativeSearchQueryBuilder() .withQuery(queryBuilder) //添加查詢條件 .addAggregation(agg) // 添加聚合條件 .withPageable(PageRequest.of(0, 10)) //符合查詢條件的文檔分頁(不是聚合的分頁) .build(); // 執(zhí)行查詢 AggregatedPage 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.shaoqun.com/a/466734.html
*特別聲明:以上內容來自于網絡收集,著作權屬原作者所有,如有侵權,請聯系我們:admin@shaoqun.com。
0
總結
以上是生活随笔為你收集整理的estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用binlog恢复数据
- 下一篇: iis mysql版本切换_MySQL+