Elasticsearch聚合 之 Range区间聚合
Elasticsearch提供了多种聚合方式,能帮助用户快速的进行信息统计与分类,本篇主要讲解下如何使用Range区间聚合。
最简单的例子,想要统计一个班级考试60分以下、60到80分、80到100分,在ES中只要一个命令就可以轻松统计....
更多资料参考:Elasticsearch文档翻译
聚合例子
按照前言中的例子,可以执行下面的命令:
{
"aggs":{
"grade_ranges":{
"range":{
"field":"grade",
"ranges":[
{"to":},
{"from":,"to":},
{"from":}]
}
}
}
}
得到如下的结果:
{
...
"aggregations":{
"price_ranges":{
"buckets":[
{
"to":,
"doc_count":
},
{
"from":,
"to":,
"doc_count":
},
{
"from":,
"doc_count":
}
]
}
}
}
复杂点的例子,指定每个区间的名字
可以通过设置keyed:true,使每个区间都返回一个特定的名字:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"keyed":true,
"ranges":[
{"to":},
{"from":,"to":},
{"from":}
]
}
}
}
}
默认会按照区间命名:
{
...
"aggregations":{
"price_ranges":{
"buckets":{
"*-50.0":{
"to":,
"doc_count":
},
"50.0-100.0":{
"from":,
"to":,
"doc_count":
},
"100.0-*":{
"from":,
"doc_count":
}
}
}
}
}
当然也可以指定区间的名字:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"keyed":true,
"ranges":[
{"key":"cheap","to":},
{"key":"average","from":,"to":},
{"key":"expensive","from":}
]
}
}
}
}
使用脚本
与其他的聚合类似,Range聚合支持脚本的使用:
{
"aggs":{
"price_ranges":{
"range":{
"script":"doc['price'].value",
"ranges":[
{"to":},
{"from":,"to":},
{"from":}
]
}
}
}
}
文件脚本或者脚本值的操作都与其他的差不多,就不再赘述了。
聚合嵌套
通常在区间聚合中,都会嵌套子聚合,比如我们在每个区间中做统计stats聚合:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"ranges":[
{"to":},
{"from":,"to":},
{"from":}
]},
"aggs":{
"price_stats":{
"stats":{
"field":"price"
}
}
}
}
}
}
那么得到的结果会如下所示:
{
"aggregations":{
"price_ranges":{
"buckets":[
{
"to":,
"doc_count":,
"price_stats":{
"count":,
"min":,
"max":,
"avg":33.5,
"sum":
}
},
{
"from":,
"to":,
"doc_count":,
"price_stats":{
"count":,
"min":,
"max":,
"avg":82.5,
"sum":
}
},
{
"from":,
"doc_count":,
"price_stats":{
"count":,
"min":,
"max":,
"avg":,
"sum":
}
}
]
}
}
}
如果不指定聚合的字段,那么默认会按照Range聚合的字段来做统计:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"ranges":[
{"to":},
{"from":,"to":},
{"from":}
]
},
"aggs":{
"price_stats":{
"stats":{}
}
}
}
}
}
Elasticsearch聚合 之 Range区间聚合的更多相关文章
- Elasticsearch聚合 之 Date Histogram聚合
Elasticsearch的聚合主要分成两大类:metric和bucket,2.0中新增了pipeline还没有研究.本篇还是来介绍Bucket聚合中的常用聚合--date histogram.参考: ...
- Elasticsearch 第六篇:聚合统计查询
h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...
- Elasticsearch学习系列四(聚合搜索)
聚合分析 聚合分析是数据库中重要的功能特性,完成对一个查询的集中数据的聚合计算.如:最大值.最小值.求和.平均值等等.对一个数据集求和,算最大最小值等等,在ES中称为指标聚合,而对数据做类似关系型数据 ...
- ElasticSearch 2 (35) - 信息聚合系列之近似聚合
ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...
- elasticsearch聚合之bucket terms聚合
目录 1. 背景 2. 前置条件 2.1 创建索引 2.2 准备数据 3. 各种聚合 3.1 统计人数最多的2个省 3.1.1 dsl 3.1.2 运行结果 3.2 统计人数最少的2个省 3.2.1 ...
- Flask聚合函数(基本聚合函数、分组聚合函数、去重聚合函数))
Flask聚合函数 1.基本聚合函数(sun/count/max/min/avg) 使用聚合函数先导入:from sqlalchemy import func 使用方法: sun():func.sum ...
- Elasticsearch聚合 之 Histogram 直方图聚合
Elasticsearch支持最直方图聚合,它在数字字段自动创建桶,并会扫描全部文档,把文档放入相应的桶中.这个数字字段既可以是文档中的某个字段,也可以通过脚本创建得出的. 桶的筛选规则 举个例子,有 ...
- Elasticsearch 聚合统计与SQL聚合统计语法对比(一)
Es相比关系型数据库在数据检索方面有着极大的优势,在处理亿级数据时,可谓是毫秒级响应,我们在使用Es时不仅仅进行简单的查询,有时候会做一些数据统计与分析,如果你以前是使用的关系型数据库,那么Es的数据 ...
- 把 Elasticsearch 当数据库使:聚合后排序
使用 https://github.com/taowen/es-monitor 可以用 SQL 进行 elasticsearch 的查询.有的时候分桶聚合之后会产生很多的桶,我们只对其中部分的桶关心. ...
随机推荐
- Xamarin跨平台移动开发解决方案
Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows Phone和Mac App.Xam ...
- webview使用总结及注意事项
1 网页 调用后台java代码 ,后台处理 一 网页上click事件 <a href="javascript:;" onclick="window.JsNative ...
- Arcgis –>ArcToolBox 有些工具不能用,没有许可
问题描述 错误信息: You do not have the necessary license to execute the selected tool 我3D Analyst是有许可的. ...
- java提高篇(十五)-----关键字final
在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是“这部分是无法修改的”.不想被改变的原因有两个:效率.设计.使用到fi ...
- Propagation of Visual Entity Properties Under Bandwidth Constraints
1. Introduction The Saga of Ryzom is a persistent massively-multiplayer online game (MMORPG) release ...
- 在js中对时间类型格式化字符串
Date.prototype.toString = function (format) { if (format == null) { format = "yyyy-MM-dd HH:mm: ...
- Android Studio2.x版本无法自动关联源码的解决方法
Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...
- IOS 公共类-数字处理
1.写一个方法,调用的时候交换两个数的值 -(void) swap:(int*)a andNumber:(int*)b{ int temp = *a; *a = *b; *b = temp; } 调用 ...
- 自己封装个ajax
你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...
- SQL中group by的用法
group by即按照给定字段对结果集进行分组,从字面意义上理解就是根据"by"指定的规则对数据进行分组,所谓的分组就是将一个"数据集"划分成若干个" ...