elasticSearch聚合sum查询
有时需要统计一段时间内,订单的总金额。类似于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 ");
elasticSearch聚合sum查询的更多相关文章
- ElasticSearch 聚合查询百分比
这里用的是es5.6.9 bucket_script :它执行一个脚本,该脚本可以对多桶聚合中的指定度量执行每桶计算,指定的度量标准必须为数字,并且脚本必须返回数值. 官方语法 https://www ...
- Elasticsearch 第六篇:聚合统计查询
h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...
- ElasticSearch聚合(转)
ES之五:ElasticSearch聚合 前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提 ...
- Elasticsearch聚合初探——metric篇
Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的统计--聚合. 前言 ES中的聚合被分为两大类:Metric度量和bucket桶(原谅我英语差,找不 ...
- Elasticsearch文档查询
简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...
- Elasticsearch(GEO)空间检索查询
Elasticsearch(GEO)空间检索查询python版本 1.Elasticsearch ES的强大就不用多说了,当你安装上插件,搭建好集群,你就拥有了一个搜索系统. 当然,ES的集群优化和查 ...
- ElasticSearch聚合分析
聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频 ...
- kibana和ElasticSearch的信息查询检索
使用kibana来进行ElasticSearch的信息查询检索 大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括Ela ...
- Elasticsearch索引和查询性能调优的21条建议
Elasticsearch部署建议 1. 选择合理的硬件配置:尽可能使用 SSD Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能.使用SSD(PCI-E接口SSD卡/SA ...
随机推荐
- C#计算时间差 TimeSpan
TimeSpan的相关属性 Add:与另一个TimeSpan值相加. Days:返回用天数计算的TimeSpan值. Duration:获取TimeSpan的绝对值. Hours:返回用小时计算的Ti ...
- 三星笔记本进入BIOS后找不到U盘启动项/快速启动键F12没有反应
分析:BIOS开启了 Fast Bios Mode 解决方法: 开机按F2进入BIOS设置,选择Advanced菜单下Fast Bios Mode,设置为 Disabled,按F10键保存退出,重启时 ...
- 几个常用dos网络命令
ping www.baidu.com 测试网络的同时,查看ip地址 1. 如图:百度的ip为 14.215.177.39.浏览器直接输入ip即可进入百度首页. 另外还有,14.215.177.38 ...
- Python 提案
学习Java 不可不知JSR,学习Python自然也得知道 PEP了 1- PEP简介 PEP是Python增强提案(Python Enhancement Proposal)的缩写.https://w ...
- Python: 内置私有方法
################## __new__ ##################@staticmethod__new__(cls [, ...])类的构造器,创建某个类的实例,返回值应该是c ...
- linux ubuntu 关于vim得一些基本命令
1.vim显示行号 :set number 2. 快捷键 J 向下 K 往上 H 向左 L 向右 ctrl+shift+T 打开新窗口 ctrl+Page Down 所有vim窗口向下切换 ctrl+ ...
- UVA11491-Erasing ans Winning(贪心)
Problem UVA11491-Erasing ans Winning Accept: 799 Submit: 5753Time Limit: 3000 mSec Problem Descript ...
- UVA12107-Digit Puzzle(迭代加深搜索)
Problem UVA12107-Digit Puzzle Accept:85 Submit:612 Time Limit: 3000 mSec Problem Description Inpu ...
- [tool] Visual Studio Code python配置
语言设置 安装中文插件即可成为中文 选择一个Python解释器 Python是一种解释型语言,为了运行Python代码并获取Python IntelliSense,您必须告诉VS Code使用哪个解释 ...
- 强化学习(三)—— 时序差分法(SARSA和Q-Learning)
1.时序差分法基本概念 虽然蒙特卡洛方法可以在不知道状态转移概率矩阵的前提下,灵活地求解强化学习问题,但是蒙特卡洛方法需要所有的采样序列都是完整的状态序列.如果我们没有完整的状态序列就无法用蒙特卡洛方 ...