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区间聚合的更多相关文章

  1. Elasticsearch聚合 之 Date Histogram聚合

    Elasticsearch的聚合主要分成两大类:metric和bucket,2.0中新增了pipeline还没有研究.本篇还是来介绍Bucket聚合中的常用聚合--date histogram.参考: ...

  2. Elasticsearch 第六篇:聚合统计查询

    h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...

  3. Elasticsearch学习系列四(聚合搜索)

    聚合分析 聚合分析是数据库中重要的功能特性,完成对一个查询的集中数据的聚合计算.如:最大值.最小值.求和.平均值等等.对一个数据集求和,算最大最小值等等,在ES中称为指标聚合,而对数据做类似关系型数据 ...

  4. ElasticSearch 2 (35) - 信息聚合系列之近似聚合

    ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...

  5. 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 ...

  6. Flask聚合函数(基本聚合函数、分组聚合函数、去重聚合函数))

    Flask聚合函数 1.基本聚合函数(sun/count/max/min/avg) 使用聚合函数先导入:from sqlalchemy import func 使用方法: sun():func.sum ...

  7. Elasticsearch聚合 之 Histogram 直方图聚合

    Elasticsearch支持最直方图聚合,它在数字字段自动创建桶,并会扫描全部文档,把文档放入相应的桶中.这个数字字段既可以是文档中的某个字段,也可以通过脚本创建得出的. 桶的筛选规则 举个例子,有 ...

  8. Elasticsearch 聚合统计与SQL聚合统计语法对比(一)

    Es相比关系型数据库在数据检索方面有着极大的优势,在处理亿级数据时,可谓是毫秒级响应,我们在使用Es时不仅仅进行简单的查询,有时候会做一些数据统计与分析,如果你以前是使用的关系型数据库,那么Es的数据 ...

  9. 把 Elasticsearch 当数据库使:聚合后排序

    使用 https://github.com/taowen/es-monitor 可以用 SQL 进行 elasticsearch 的查询.有的时候分桶聚合之后会产生很多的桶,我们只对其中部分的桶关心. ...

随机推荐

  1. Xamarin跨平台移动开发解决方案

    Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows Phone和Mac App.Xam ...

  2. webview使用总结及注意事项

    1 网页 调用后台java代码 ,后台处理 一 网页上click事件 <a href="javascript:;" onclick="window.JsNative ...

  3. Arcgis –>ArcToolBox 有些工具不能用,没有许可

    问题描述 错误信息: You do not have the necessary license to execute the selected tool   我3D Analyst是有许可的.   ...

  4. java提高篇(十五)-----关键字final

    在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是“这部分是无法修改的”.不想被改变的原因有两个:效率.设计.使用到fi ...

  5. Propagation of Visual Entity Properties Under Bandwidth Constraints

    1. Introduction The Saga of Ryzom is a persistent massively-multiplayer online game (MMORPG) release ...

  6. 在js中对时间类型格式化字符串

    Date.prototype.toString = function (format) { if (format == null) { format = "yyyy-MM-dd HH:mm: ...

  7. Android Studio2.x版本无法自动关联源码的解决方法

    Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...

  8. IOS 公共类-数字处理

    1.写一个方法,调用的时候交换两个数的值 -(void) swap:(int*)a andNumber:(int*)b{ int temp = *a; *a = *b; *b = temp; } 调用 ...

  9. 自己封装个ajax

    你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...

  10. SQL中group by的用法

    group by即按照给定字段对结果集进行分组,从字面意义上理解就是根据"by"指定的规则对数据进行分组,所谓的分组就是将一个"数据集"划分成若干个" ...