Elasticsearch聚合 之 Range区间聚合
时间:2022-04-22
本文章向大家介绍Elasticsearch聚合 之 Range区间聚合,主要内容包括聚合例子、复杂点的例子,指定每个区间的名字、使用脚本、聚合嵌套、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
Elasticsearch提供了多种聚合方式,能帮助用户快速的进行信息统计与分类,本篇主要讲解下如何使用Range区间聚合。 最简单的例子,想要统计一个班级考试60分以下、60到80分、80到100分,在ES中只要一个命令就可以轻松统计.... 更多资料参考:Elasticsearch文档翻译
聚合例子
按照前言中的例子,可以执行下面的命令:
{
"aggs":{
"grade_ranges":{
"range":{
"field":"grade",
"ranges":[
{"to":60},
{"from":60,"to":80},
{"from":80}]
}
}
}
}
得到如下的结果:
{
...
"aggregations":{
"price_ranges":{
"buckets":[
{
"to":60,
"doc_count":2
},
{
"from":60,
"to":80,
"doc_count":32
},
{
"from":80,
"doc_count":14
}
]
}
}
}
复杂点的例子,指定每个区间的名字
可以通过设置keyed:true,使每个区间都返回一个特定的名字:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"keyed":true,
"ranges":[
{"to":50},
{"from":50,"to":100},
{"from":100}
]
}
}
}
}
默认会按照区间命名:
{
...
"aggregations":{
"price_ranges":{
"buckets":{
"*-50.0":{
"to":50,
"doc_count":2
},
"50.0-100.0":{
"from":50,
"to":100,
"doc_count":4
},
"100.0-*":{
"from":100,
"doc_count":4
}
}
}
}
}
当然也可以指定区间的名字:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"keyed":true,
"ranges":[
{"key":"cheap","to":50},
{"key":"average","from":50,"to":100},
{"key":"expensive","from":100}
]
}
}
}
}
使用脚本
与其他的聚合类似,Range聚合支持脚本的使用:
{
"aggs":{
"price_ranges":{
"range":{
"script":"doc['price'].value",
"ranges":[
{"to":50},
{"from":50,"to":100},
{"from":100}
]
}
}
}
}
文件脚本或者脚本值的操作都与其他的差不多,就不再赘述了。
聚合嵌套
通常在区间聚合中,都会嵌套子聚合,比如我们在每个区间中做统计stats聚合:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"ranges":[
{"to":50},
{"from":50,"to":100},
{"from":100}
]},
"aggs":{
"price_stats":{
"stats":{
"field":"price"
}
}
}
}
}
}
那么得到的结果会如下所示:
{
"aggregations":{
"price_ranges":{
"buckets":[
{
"to":50,
"doc_count":2,
"price_stats":{
"count":2,
"min":20,
"max":47,
"avg":33.5,
"sum":67
}
},
{
"from":50,
"to":100,
"doc_count":4,
"price_stats":{
"count":4,
"min":60,
"max":98,
"avg":82.5,
"sum":330
}
},
{
"from":100,
"doc_count":4,
"price_stats":{
"count":4,
"min":134,
"max":367,
"avg":216,
"sum":864
}
}
]
}
}
}
如果不指定聚合的字段,那么默认会按照Range聚合的字段来做统计:
{
"aggs":{
"price_ranges":{
"range":{
"field":"price",
"ranges":[
{"to":50},
{"from":50,"to":100},
{"from":100}
]
},
"aggs":{
"price_stats":{
"stats":{}
}
}
}
}
}
- lncRNA实战项目-第四步-得到表达矩阵的流程
- 一次切割日志引发的血案
- lncRNA实战项目-第三步-了解参考基因组及注释文件
- 如何通过iframe调用其他页面的内容
- WCF 学习总结1 -- 简单实例
- Java8 + Tomcat8 实现Websocket 例子
- Python Syslog Server 开发实例
- WCF 学习总结2 -- 配置WCF
- SQLite事务 SQLite插入多条语句为什么这么慢?.net (C#)
- Linux 应用程序开发入门
- LINQ to XML LINQ学习第一篇
- PHP 安全与性能
- Extjs 项目中常用的小技巧,也许你用得着(5)--设置 Ext.data.Store 传参的请求方式
- WPF备忘录(5)怎样修改模板中的控件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法