elasticsearchTemplate实现聚合查询
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇内容主要讲解"elasticsearchTemplate实现聚合查询",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"elasticsearchTempl
千家信息网最后更新 2025年01月24日elasticsearchTemplate实现聚合查询
本篇内容主要讲解"elasticsearchTemplate实现聚合查询",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"elasticsearchTemplate实现聚合查询"吧!
直接上代码:
// 创建一个查询条件对象BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();// 拼接查询条件queryBuilder.should(QueryBuilders.termQuery("字段", "值"));// 创建聚合查询条件TermsAggregationBuilder agg = AggregationBuilders.terms("聚合名称,自定义,取出时会用到").field("聚合字段").size(100);// size是查询聚合出来的条数// 创建查询对象SearchQuery build = new NativeSearchQueryBuilder() .withQuery(queryBuilder) //添加查询条件 .addAggregation(agg) // 添加聚合条件 .withPageable(PageRequest.of(0, 1)) //符合查询条件的文档分页(不是聚合的分页) .build();// 执行查询AggregatedPagetestEntities = elasticsearchTemplate.queryForPage(build, TestEntity.class);// 取出聚合结果Aggregations entitiesAggregations = testEntities.getAggregations(); Terms terms = (Terms)propertyInfoEntities.getAggregation("聚合名称,之前自定义的");// 遍历取出聚合字段列的值,与对应的数量for (Terms.Bucket bucket : terms.getBuckets()) { String keyAsString = bucket.getKeyAsString(); // 聚合字段列的值 long docCount = bucket.getDocCount();// 聚合字段对应的数量 }
多字段聚合:
// 创建一个查询条件对象BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();// 拼接查询条件queryBuilder.should(QueryBuilders.termQuery("字段", "值"));// 创建聚合查询条件TermsAggregationBuilder agg1 = AggregationBuilders.terms("聚合名称2").field(聚合字段2).size(100)TermsAggregationBuilder agg = AggregationBuilders.terms("聚合名称1").field("聚合字段1").size(100).subAggregation(agg1)//拼接上上一个聚合条件// 创建查询对象SearchQuery build = new NativeSearchQueryBuilder() .withQuery(queryBuilder) //添加查询条件 .addAggregation(agg) // 添加聚合条件 .withPageable(PageRequest.of(0, 1)) //符合查询条件的文档分页(不是聚合的分页) .build();// 执行查询AggregatedPagetestEntities = elasticsearchTemplate.queryForPage(build, TestEntity.class);// 取出聚合结果Aggregations entitiesAggregations = testEntities.getAggregations(); Terms terms = (Terms)propertyInfoEntities.getAggregation("聚合名称");// 遍历最外层的聚合结果for (Terms.Bucket bucket : terms.getBuckets()) { String keyAsString = bucket.getKeyAsString(); // 聚合字段列的名称 long docCount = bucket.getDocCount();// 聚合字段对应的数量 // 获取内部的聚合字段信息 Aggregations aggregations = bucket.getAggregations(); Terms terms2 = aggregations.get("聚合名称2"); // 遍历获取agg1的聚合信息 for (Terms.Bucket bucket1 : terms2.getBuckets()) { String keyAsString2 = bucket.getKeyAsString(); // 聚合字段列的名称 long docCount2 = bucket.getDocCount();// 聚合字段对应的数量 } }
多个字段一次性聚合:
// 创建一个查询条件对象BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();// 拼接查询条件queryBuilder.should(QueryBuilders.termQuery("字段", "值"));// 创建聚合查询条件String script = "doc['" + 字段1 + "'].values +'/'+ doc['" + 字段2 + "'].values +'/'+ doc['" + 字段3 + "'].values"; // 编写script语句Script script1 = newScript(script); // 新建一个script对象TermsAggregationBuilder agg = AggregationBuilders.terms("聚合名称").script(script1).size(99999); // 创建一个聚合查询对象SearchQuery build = new NativeSearchQueryBuilder() .withQuery(queryBuilder) //添加查询条件 .addAggregation(agg) // 添加聚合条件 .withPageable(PageRequest.of(0, 1)) //符合查询条件的文档分页(不是聚合的分页) .build();// 执行查询AggregatedPagetestEntities = elasticsearchTemplate.queryForPage(build, TestEntity.class);Terms terms = (Terms) shopDbEntities.getAggregation("聚合名称");for (Terms.Bucket bucket : terms.getBuckets()) { // 循环取出聚合的值 String keyAsString = bucket.getKeyAsString(); String[] split = keyAsString.split("/"); // 切割取出每个字段 System.out.println("字段1"+split[0]); System.out.println("字段2"+split[1]); System.out.println("字段3"+split[2]); }
更多字段聚合按照以上类推,如果实在对于结构不理解可以将查询语句打印出来,将打印语句拿到Kibana之类的查询工具中查询看下结构,或者直接Debug看下数据结构,就比较好理解了
到此,相信大家对"elasticsearchTemplate实现聚合查询"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
查询
字段
条件
名称
对象
数量
文档
结构
结果
语句
信息
内容
更多
学习
上上
实用
更深
一次性
代码
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国网络安全与
做好网络安全做好保密工作
在窗体增加数据库数据
数据库可以存储的对象
什么软件是数据库管理系统
丰润区创新软件开发品质保障
服务器做短视频
mysql8 数据库驱动
农业信息技术的核心是数据库
人文服务器
信用卡激活服务器没有响应
银行系统数据库实施
盐城运营软件开发咨询热线
惠普服务器电源怎么查生产日期
徐州精益管理软件开发
一套安全的网络安全体系
软件开发中心有哪几个
可以下载游戏的服务器
网络技术用途
穿越网络网络安全管理限制
我的世界电脑神奇宝贝服务器下载
江西正邦软件开发岗位怎么样
曙光服务器a420r 测评
广告国际网络安全协议
小爱音箱软件开发
服务器证书不受信任
汽车电子软件开发与测试论坛
我的世界现在服务器怎么进
2019网络安全攻击数据
有关网络安全的视频