2019独角兽企业重金招聘Python工程师标准>>>

Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的统计——聚合。

前言

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的统计。
  • 在聚合中支持脚本的使用,可以增加统计的灵活度。

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

转载于:https://my.oschina.net/u/204616/blog/545171

Elasticsearch聚合初探——metric篇相关推荐

  1. 聚合中返回source_大数据搜索与可视化分析(9)elasticsearch聚合分析Metric Aggregation...

    在上一篇文章中,我们介绍了<大数据搜索与可视化分析(8)kibana入门教程-2-Discover>,本文学习elasticsearch聚合分析,是对<大数据搜索与可视化分析(3)e ...

  2. ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)

    ElasticSearch聚合语法学习 目录 bucket与metric两个核心概念 插入数据 统计哪种颜色电视销量最高 统计每种颜色电视平均价格 bucket嵌套实现颜色+品牌的多层下钻 统计每种颜 ...

  3. es的聚合mysql聚合速度_Elasticsearch(8) --- 聚合查询(Metric聚合)

    摘要: quot;:0,"aggs":{"stats_salary":{"stats":{"field":"s ...

  4. 【Elasticsearch】基于儿童积木玩具图解 Elasticsearch 聚合

    1.概述 转载:https://elastic.blog.csdn.net/article/details/113011288 故事得从这一筐积木说起- 周末带孩子正准备玩积木的时候,手机响了,死磕 ...

  5. 三、elasticsearch 实际应用(碎片篇)

    参考 Elasticsearch: analyzer 一.测试 Must 里面的都得成立 should里面的成立一个即可,若should里面只有一个,那么就用这一个的条件 term 精确匹配,不会分词 ...

  6. ElasticSearch+聚合+Aggregation+示例

    ElasticSearch+聚合+Aggregation+示例 聚合提供了分组并统计数据的能力.理解聚合的最简单的方式是将其粗略地等同为SQL的GROUP BY和SQL聚合函数.在Elasticsea ...

  7. Elasticsearch聚合学习之二:区间聚合

    本文是<Elasticsearch聚合学习>系列的第二篇,上一篇是我们熟悉了聚合的基本操作,本篇的内容是按照区间聚合的实战操作: 系列文章列表 <Elasticsearch聚合学习之 ...

  8. SpringCloud(9)— Elasticsearch聚合和自动补全

    SpringCloud(9)- Elasticsearch聚合和自动补全 一 数据聚合 1.聚合的分类 聚合(aggregations)可以实现对文档数据的统计,分析,运算.常见的聚合有三种: 1.桶 ...

  9. Elasticsearch聚合分析Java Client

    本文基于Elasticsearch7.x 本文将上篇Elasticsearch聚合分析Rest API里的实例转化为Java Client Bucket Aggregation Bucket Aggr ...

最新文章

  1. 设计模式之享元模式、例子分析
  2. 如何解决Git中的合并冲突
  3. 打不开开php_(13)10个开源免费的PHP博客CMS
  4. 024 Android 自定义样式对话框(AlertDialog)
  5. linux java 查询mysql_Linux Java连接MySQL数据库
  6. c++监听键盘_想知道木马程序的键盘记录原理吗?python告诉你 !
  7. html5图片怎么顶格,iQOO 5系列几乎达到了“顶格”的性能状态。
  8. mysql查询字段变慢,MySQL Query IN()子句在索引列上变慢
  9. 父亲节,程序员几条代码硬核示爱
  10. day10 多进程、多线程(一)
  11. 使用iScroll实现上、下滑动刷新和加载更多数据
  12. python读取modis数据
  13. C#之Chart控件使用
  14. LapSRN 超分辨率
  15. 寂寞情来情去——忆纳兰词
  16. java中交换机的作用_交换机链路聚合在网络中的作用
  17. java实现3D动态效果_js实现3D粒子酷炫动态旋转特效
  18. 4th 【最小生成树并查集】征兵
  19. 解构瑞幸小鹿茶:两大战场、一套逻辑、一个梦想
  20. Intel桌面CPU系列

热门文章

  1. 图片三:numpy制作雪碧图(如何将多个图片拼接成一张图片)
  2. Vbox linux虚拟机桥接(VM操作也类似)
  3. mysql悲观锁 更新_MySQL学习笔记(四)悲观锁 for update
  4. 三菱plc 与 计算机 通讯,PC与三菱PLC之间的RS232通讯协议
  5. oracle创建序列seq起始值为1_Oracle修改序列(Sequence)起始值问题
  6. mvvm模式和mvc的区别_Android 开发中的架构模式 -- MVC / MVP / MVVM
  7. 【百战GAN】GAN也可以拿来做图像分割,看起来效果还不错?
  8. 从alexnet到resnet,初探深度学习算法玩摄影
  9. 中国中草药提取物市场需求容量与投资价值预测报告2022年
  10. 写在创业的路上:如何从无到有的打造一个产品