Elasticsearch聚合初探——metric篇

前言

ES中的聚合被分为两大类:Metric度量和bucket桶(原谅我英语差,找不到合适的词语.....就用单词来说吧!)。说的通俗点,metric很像SQL中的avg、max、min等方法,而bucket就有点类似group by了。

本篇就简单的介绍一下metric聚合的用法。

metric的聚合按照值的返回类型可以分为两种:单值聚合 和 多值聚合。

单值聚合

Sum 求和

这个聚合返回的是单个值,dsl可以参考如下:

"aggs" : {
        "intraday_return" : { "sum" : { "field" : "change" } }
    }

返回的是change字段的和:

{
    ...

    "aggregations": {
        "intraday_return": {
           "value": 2.18
        }
    }
}

其中intraday_return是聚合的名字,同时也会作为请求返回的id值。另外,聚合中是支持脚本的,这里就不过多赘述了,详细参考官方文档即可。

Min 求最小值

{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

Max 求最大值

{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }
    }
}

avg 求平均值

{
    "aggs" : {
        "avg_grade" : { "avg" : { "field" : "grade" } }
    }
}

cardinality 求唯一值,即不重复的字段有多少

{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author"
            }
        }
    }
}

多值聚合

percentiles 求百分比

{
    "aggs" : {
        "load_time_outlier" : {
            "percentile_ranks" : {
                "field" : "load_time",
                "values" : [15, 30]
            }
        }
    }
}

返回的结果包含多个值:

{
    ...

   "aggregations": {
      "load_time_outlier": {
         "values" : {
            "15": 92,
            "30": 100
         }
      }
   }
}

stats 统计

{
    "aggs" : {
        "grades_stats" : { "stats" : { "field" : "grade" } }
    }
}

请求后会直接显示多种聚合结果:

{
    ...

    "aggregations": {
        "grades_stats": {
            "count": 6,
            "min": 60,
            "max": 98,
            "avg": 78.5,
            "sum": 471
        }
    }
}

extend stats 扩展统计

{
    "aggs" : {
        "grades_stats" : { "extended_stats" : { "field" : "grade" } }
    }
}

在统计的基础上还增加了多种复杂的统计信息:

{
    ...

    "aggregations": {
        "grade_stats": {
           "count": 9,
           "min": 72,
           "max": 99,
           "avg": 86,
           "sum": 774,
           "sum_of_squares": 67028,
           "variance": 51.55555555555556,
           "std_deviation": 7.180219742846005,
           "std_deviation_bounds": {
            "upper": 100.36043948569201,
            "lower": 71.63956051430799
           }
        }
    }
}

总结

上面并没有列举全面,比如2.0版本的ES,还支持多值的percentile Rank百分比排名,Geo Bounds地理位置信息,Scripted Metric脚本;单值的top hits等等。

  • 在性能上,ES也做了很多的优化:比如max和min,如果对于排序的字段,那么就直接跳过了计算的步骤,直接取出目标值即可。
  • 当然有些聚合也是需要特定的场合的,比如cardinality计算唯一值是通过哈希的方式,如果字段数据规模很大,那么会消耗很多的性能。
  • 另外桶之间是可以嵌套的,比如在range聚合下嵌套了一个max聚合,那么会在range得到的每个结果组上,再次进行max的统计。
  • 在聚合中支持脚本的使用,可以增加统计的灵活度。

很多内容还需要在实践中使用,才能了解它的优势。

时间: 2024-10-01 06:36:06

Elasticsearch聚合初探——metric篇的相关文章

ElasticSearch入门 第八篇:存储

这是ElasticSearch 2.4 版本系列的第八篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 ElasticSearch入门 第七篇:分析器 Elasti

ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 在ElasticSearch中,使用JSON结构来存储数据,

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标) 2015-01-04 来源: http://blog.csdn.net/dm_vincent/article/details/42387161 本章翻译自Elasticsearch官方指南的Aggregations-High-level Concepts一章. 高层概念(High-Level Concepts) 和查询DSL一样,聚合(Aggregations)也拥有一种可组合(Composabl

Android插件开发初探——分析篇

承接上文 Android插件开发初探--基础篇 http://blog.csdn.net/yzzst/article/details/45582315 我们通过使用DexClassLoader能够将classes.dex中的类动态的加载进入当前进程.当然,也就可以预先定一些代理的接口完成四大组件的功能. 整体功能如下图所示: 当然,对于一个Android的应用程序而言,只是动态的加载类与声明四大组件是不够的.如下图所示,使我们常见到的一个APK文件解压缩后的文件内容. 有过Android项目开发

ElasticSearch聚合分析

聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频uv Having查询 根据 count 进行过滤 根据其它指标进行过滤 首先展示一下我们要分析的文档结构: { "video_id": 1289643545120062253, // 视频id "video_uid": 3931482202390368051, //

最新版本elasticsearch本地搭建入门篇

最新版本elasticsearch本地搭建入门篇 项目介绍 最近工作用到elasticsearch,主要是用于网站搜索,和应用搜索. 工欲善其事,必先利其器. 自己开始关注elasticsearch,当下最新版本的elastic,安装过程中踩了不少坑(百度出来都是 老版本),于是就整理了一下,以简单的图解方式分享给最近开始学习elastic的,少踩不必要坑,直接开始上手使用REST API,提高学习效率,值为更好的自己. elasticsearch初识-安装篇 elastic Product A

Elasticsearch聚合问题

在测试Elasticsearch聚合的时候报了一个错误.具体如下: GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } 报错信息 { "error": { "root_cause": [ { "type&qu

Elasticsearch聚合--Metrics初探

Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的的统计-聚合.kubana的图标就是基于聚合来绘制的.更多内容请参考Elasticsearch+Logstash+Kibana教程 前言 ES中的聚合被分成两大类:Metrics度量和bucket桶,metrics类似于SQL中的avg.max.min等方法,而bucket类似于group by了. 本篇就简单的介绍一下metrics的用法. metrics的聚合按照值的返回类型可以分为两种:单值

Elasticsearch聚合 之 Range区间聚合

Elasticsearch提供了多种聚合方式,能帮助用户快速的进行信息统计与分类,本篇主要讲解下如何使用Range区间聚合. 最简单的例子,想要统计一个班级考试60分以下.60到80分.80到100分,在ES中只要一个命令就可以轻松统计.... 更多资料参考:Elasticsearch文档翻译 聚合例子 按照前言中的例子,可以执行下面的命令: { "aggs":{ "grade_ranges":{ "range":{ "field&qu