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. ubuntu共享文件配置

    目标:实现windows和linux混合组成的操作 系统中可以共享文件,并可以通过机器名互相访问 安装文件共享服务 0.更改本机主机名,修改 /etc/hostname文件和/etc/hosts文件中 ...

  2. sass中级语法

    github地址:https://github.com/lily1010/sass/tree/master/course02 用到的sass语法是: sass --watch test.scss:te ...

  3. Replication的犄角旮旯(一)--变更订阅端表名的应用场景

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  4. 如何安全地关闭MySQL实例

    如何安全地关闭MySQL实例 转载自:http://imysql.com/2014/08/13/mysql-faq-howto-shutdown-mysqld-fulgraceful.shtml 本文 ...

  5. ORACLE 自定义分页存储过程

    一.创建包 CREATE OR REPLACE PACKAGE PKG_JK_LAB_BASIC IS TYPE CURSOR_TYPE IS REF CURSOR; PROCEDURE SP_GET ...

  6. Docker Machine v1.11.2安装与使用

    官方文档:Docker Machine 官方文档:Docker Toolbox boot2docker安装包官网下载链接:Docker Toolbox-1.11.1b.exe 此安装包包含的“boot ...

  7. 我的前端架构之二--统一扩展Js方法

    我的前端架构汇总 MyJs_Core.js 这是一个核心的Js文件,它扩展了原生的Js方法.如下: Array对象: 1) indexOf 2) max 3) min 4) removeAt 5) i ...

  8. MySQL6:触发器

    什么是触发器 MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序.触发器是由事件来触发某个操作,这些事件包括INSERT.UPDATE和DELETE语句.如果定义了触 ...

  9. Silverlight无法启动调试,错误“Unable to start debugging. The Silverlight Developer Runtime is not installed. Please install a matching version.” 解决办法

    今天调试Silverlight出现了以下错误: 意思是“无法启动调试,因为Silverlight Developer Runtime没有安装,请安装一个匹配的版本”.但是按Ctrl + F5可以调试运 ...

  10. java指定路径写、读文件

    package com.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...