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":{}
                }
            }
        }
    }
}
时间: 2024-10-23 14:27:24

Elasticsearch聚合 之 Range区间聚合的相关文章

Guava中RangeMap自定义range区间

***********************************************声明****************************************************** 原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! *******************************************

KeyMob移动广告聚合平台-KeyMob广告聚合服务

事到如今,聚合广告已经不再是什么新玩意了,很多应用开发者都是靠嵌入广告赚点自己的零花钱,但是不可能在一棵树上吊死,因此有部分开发者选择了广告聚合的理念.其实聚合广告开发者可以自己实现一些简单的功能,也可以借助第三方的聚合平台(如KeyMob广告聚合平台). 相信很多开发者都有体会,目前国内一部分广告平台的广告的单价太低了,以目前的广告价格赚大钱是很难的.这也就是为什么大的应用尽管是免费的,但不嵌入广告的原因.大的应用主要是看应用的点击率和用户数,大概要等到广告的价格上来了,才会重新嵌入广告收费吧

窗口聚合函数与分组聚合函数的异同

窗口聚合函数与分组聚合函数的功能是相同的:唯一不同的是,分组聚合函数通过分组查询来进行,而窗口聚合函数通过OVER子句定义的窗口来进行. --<T-SQL性能调优秘笈---基于SQL Server2012窗口函数>2.1.1窗口聚合函数描述

数字资产聚合交易新模式聚合币币交易所系统开发

聚合交易所是去年出的新模式,这种模式就像他的名字一样,聚合对接多个交易所,不需要用户去绑定交易所API,而是在交易所后台就打通了所有交易所,真正意义上实现了聚合交易所. 1.聚合交易所可以对接市场上大多数交易所,其他交易所开放接口就可以对接.同时也可以对接那些交易所的所有交易对,几乎涵盖市场上百分之九十的币种. 2.聚合交易所拥有智能比价功能,实时的在多个交易所的价格上比较并展现最优下单价格,让用户更好更优的下单,无需再去使用第三方工具比价,省事省时. 以上是这个聚合交易所的两大亮点,其他都和普

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

使用 https://github.com/taowen/es-monitor 可以用 SQL 进行 elasticsearch 的查询.有的时候分桶聚合之后会产生很多的桶,我们只对其中部分的桶关心.最简单的办法就是排序之后然后取前几位的结果. ORDER BY _term SQL $ cat << EOF | ./es_query.py http://127.0.0.1:9200 SELECT ipo_year, COUNT(*) FROM symbol GROUP BY ipo_year

elasticsearch的基础语句介绍 聚合功能很强大 可以分析数据

elasticsearch聚合功能很强大 可以分析数据,比MySQL更加强大.可以根据爬山归类到运动... 下面是 安装以及一些基础命令 安装 curl -L -O http://download.elasticsearch.org/PATH/TO/VERSION.zip <1> unzip elasticsearch-VERSION.zipcdelasticsearch?VERSION 插件 ./bin/plugin -i elasticsearch/marvel/latest 禁用监控,关

广告聚合:KeyMob移动广告聚合平台的特色功能简介,KeyMob特色功能

一.服务简介 KeyMob移动广告聚合平台是国内专业的手机广告优化管理平台,通过与多家广告平台.DSP平台以及广告交易平台合作,为开发者降低广告管理与大幅度提升广告收入. 二.功能特色 使用KeyMob可以顺利通过应用市场审核 KeyMob通过云端集成广告平台的方式,让市场无法检测到广告,助您顺利通过应用市场审核: 使用KeyMob不再担心封号 KeyMob提供远程管理平台ID和Key,随时更换,不再担心被平台封号:KeyMob作为专门的管理工具,不存在违规,也不会封开发者的号. 自主销售广告

KeyMob-移动广告聚合平台,专业聚合广告

2011年的时候,应用开发及手机广告平台.广告聚合平台吸引了大批开发者投进入,其中竞争最激烈的就是手机广告平台.那时候手机广告平台是应用P开发者最容易看得见的赚钱方式.这一段时间成长起来的广告平台如有米.多盟.万普世纪.Adview(聚合)等. 目前国内情况是:应用内置广告是移动应用开发者主要的盈利模式,开发者通过与移动广告平台合作,实现了直接与平台中大量优质的广告主无缝对接,从而以较小的投入博取收益. KeyMob正是为这些中小开发者服务的,中小开发者通过嵌入我们的SDK,可以获得我们稳定.高

Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 Linq,而只能通过构造底层查询树的接口来完成了.由于开发者的聚合查询的需求越来越多,所以本周我们将这部分进行了增强. 接下来,本文将说明 Rafy 框架原来支持的 Linq 语法,以及最新加入的聚合查询支持及用法.   使用 Linq 查询的代码示例 public WarehouseList G