elasticSearch聚合sum查询
2024-10-13 19:39:20
有时需要统计一段时间内,订单的总金额。类似于sql的sum,针对某一字段求和。这就涉及到es的聚合查询,来看看用spring-data-elasticSearch怎么写:
- QueryBuilder queryBuilder = QueryBuilders.boolQuery()
- .must(QueryBuilders.rangeQuery("orderTime").gte(from).lte(to));
- // 聚合查询。goodsSales是要统计的字段,sum_sales是自定义的别名
- SumAggregationBuilder sumBuilder = AggregationBuilders.sum("sum_sales").field("goodsSales");
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(queryBuilder)
- .addAggregation(sumBuilder)
- .build();
- double saleAmount = elasticsearchTemplate.query(searchQuery, response -> {
- InternalSum sum = (InternalSum)response.getAggregations().asList().get(0);
- return sum.getValue();
- });
对应es查询语句:
- {
- "query": {
- "bool": {
- "must": [
- {
- "range": {
- "orderTime": {
- "gte": 20180313,
- "lte": 20180314
- }
- }
- },
- {
- "match": {
- "skuNo": "888"
- }
- }
- ]
- }
- },
- "aggs": {
- "sum_value": {
- "sum_sales": {
- "field": "goodsSales"
- }
- }
- }
- }
以下还有一些常用聚合查询(参考http://blog.csdn.net/u010454030/article/details/63266035):
- (1)统计某个字段的数量
- ValueCountBuilder vcb= AggregationBuilders.count("count_uid").field("uid");
- (2)去重统计某个字段的数量(有少量误差)
- CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");
- (3)聚合过滤
- FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));
- (4)按某个字段分组
- TermsBuilder tb= AggregationBuilders.terms("group_name").field("name");
- (5)求和
- SumBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price");
- (6)求平均
- AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");
- (7)求最大值
- MaxBuilder mb= AggregationBuilders.max("max_price").field("price");
- (8)求最小值
- MinBuilder min= AggregationBuilders.min("min_price").field("price");
- (9)按日期间隔分组
- DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");
- (10)获取聚合里面的结果
- TopHitsBuilder thb= AggregationBuilders.topHits("top_result");
- (11)嵌套的聚合
- NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");
- (12)反转嵌套
- AggregationBuilders.reverseNested("res_negsted").path("kps ");
最新文章
- 同步机制 note
- 1代 angularjs ember vue 比较
- Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio
- sleep函数
- IO复用(Reactor模式和Preactor模式)——用epoll来提高服务器并发能力
- UIButton之Block回调
- jpGraph的应用及基本安装配置 BY 命运
- shell date格式化输出
- OAuth在WebApi
- Linux - 简明Shell编程09 - 重定向(Redirection)
- Git创建本地分支并推送到远程github仓库
- java,javascript中的url编码
- 关于MySQL 8.0的几个重点【转】
- Linux 下安装 Mongodb
- Java中的字段和属性
- day 21 模块 和 包
- 16.监听器-基础.md
- SFTP服务器搭建
- 详解权限管理(RBAC)的实现方法
- python中 .write 无法向文件写入内容
热门文章
- 便捷的方式在手机上查看Unity3D的Console Log(调试信息 日志)
- 【PAT】B1012 数字分类
- JavaScript -- 时光流逝(四):js中的 Math 对象的属性和方法
- 【转载】failed to initialize nvml driver/library version mismatch ubuntu
- 基于centOS7:新手篇→nginx安装
- C语言 排序算法总结
- UVA11491-Erasing ans Winning(贪心)
- 【js】JS实现的base64加密、md5加密及sha1加密详解
- 006_Python 异常处理
- Python实现机器人聊天