aggregation 详解2(metrics aggregations)
概述
权值聚合类型从需要聚合的文档中取一个值(value)来计算文档的相应权值(比如该值在这些文档中的max、sum等)。
用于计算的值(value)可以是文档的字段(field),也可以是脚本(script)生成的值。
数值权值聚合是特殊的权值聚合类型,因为它的输出权值也是数字。
数值权值聚合(注意分类只针对数值权值聚合,非数值的无此分类)输出单个权值的,叫做 single-value numeric metrics,其它生成多个权值(比如:stats)的被叫做 multi-value numeric metrics。
单值和多值数字权值聚合,在它们作为一些 Bucket 聚合的直接子聚合的时候会有明显区别。
Avg Aggregation(single-value numeric metrics)
均值聚合——基于文档的某个值,计算该值在聚合文档中的均值。
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
{
"aggs" : {
"avg_grade" : { "avg" : { "field" : "grade" } } //计算字段 grade 在文档中的平均值
}
}
//输出
{
... "aggregations": {
"avg_grade": {
"value":
}
}
}
Cardinality Aggregation(single-value)
基数聚合——基于文档的某个值,计算文档非重复的个数(去重计数)。
用于计算的值可以是特定的字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- precision_threshold:
- missing:文档缺省字段时的默认值
{
"aggs" : {
"author_count" : {
"cardinality" : {
"field" : "author" //count the unique authors that match a query
}
}
}
}
stats aggregation(multi-value)
统计聚合——基于文档的某个值,计算出一些统计信息(min、max、sum、count、avg)。
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
{
"aggs" : {
"grades_stats" : { "stats" : { "field" : "grade" } }
}
}
//输出
{
...
"aggregations": {
"grades_stats": {
"count": ,
"min": ,
"max": ,
"avg": 78.5,
"sum":
}
}
}
Extended Stats Aggregation(multi-value)
扩展统计聚合——基于文档的某个值,计算出一些统计信息(比普通的stats聚合多了sum_of_squares、
variance、
std_deviation
、std_deviation_bounds
)。
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
- sigma:标准差界限
{
... "aggregations": {
"grade_stats": {
"count": ,
"min": ,
"max": ,
"avg": ,
"sum": ,
//输出比 stats 聚合多了一些值
"sum_of_squares": ,
"variance": 51.55555555555556,
"std_deviation": 7.180219742846005,
"std_deviation_bounds": {
"upper": 100.36043948569201,
"lower": 71.63956051430799
}
}
}
}
Geo Bounds Aggregation
地理边界聚合——基于文档的某个字段(geo-point类型字段),计算出该字段所有地理坐标点的边界(左上角/右下角坐标点)。
配置参数
- field:用于计算的字段
- wrap_longitude:是否允许地理边界与国际日界线存在重叠
{
"query" : {
"match" : { "business_type" : "shop" }
},
"aggs" : {
"viewport" : {
"geo_bounds" : {
"field" : "location",
"wrap_longitude" : true
}
}
}
}
//输出
{
...
"aggregations": {
"viewport": {
"bounds": {
"top_left": { //左上角经纬度
"lat": 80.45,
"lon": -160.22
},
"bottom_right": { //右下角经纬度
"lat": 40.65,
"lon": 42.57
}
}
}
}
}
Geo Centroid Aggregation
地理重心聚合——基于文档的某个字段(geo-point类型字段),计算所有坐标的加权重心。
配置参数
- field:用于计算的字段(geo-point类型)
{
"query" : {
"match" : { "crime" : "burglary" }
},
"aggs" : {
"centroid" : {
"geo_centroid" : {
"field" : "location"
}
}
}
}
//输出
{
...
"aggregations": {
"centroid": {
"location": { //重心经纬度
"lat": 80.45,
"lon": -160.22
}
}
}
}
Max Aggregation(single)
最大值聚合——基于文档的某个值,求该值在聚合文档中的最大值。
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
Min Aggregation(single)
最小值聚合——基于文档的某个值,求该值在聚合文档中的最小值。
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
Sum Aggregation(single-value)
求和聚合——基于文档的某个值,求该值在聚合文档中的统计和。
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
//最大值,field
{
"aggs" : {
"max_price" : { "max" : { "field" : "price" } } // field
}
}
//最小值,script
{
"aggs" : {
"min_price" : {
"min" : {
"script" : { //script 计算 value
"file": "my_script",
"params": {
"field": "price"
}
}
}
}
}
}
//总和,value script
{
"aggs" : {
...
"aggs" : {
"daytime_return" : {
"sum" : {
"field" : "change", // field
"script" : "_value * _value" // 基于 field 用 script 计算 value
}
}
}
}
}
Percentiles Aggregation(multi-value)
百分百聚合——基于聚合文档中某个数值类型的值,求这些值中
用于计算的值可以是特定的数值型字段,也可以通过脚本计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
- missing:文档缺省字段时的默认值
Script Metric Aggregation
基于脚本的权值聚合——用脚本来计算出一个权值
配置参数
- init_script:用于计算的字段
- map_script:由脚本生成用来计算的 value
- combine_script:文档缺省字段时的默认值
- reduce_script:
{
"query" : {
"match_all" : {}
},
"aggs": {
"profit": {
"scripted_metric": {
"init_script" : "_agg['transactions'] = []",
"map_script" : "if (doc['type'].value == \"sale\") { _agg.transactions.add(doc['amount'].value) } else { _agg.transactions.add(-1 * doc['amount'].value) }",
"combine_script" : "profit = 0; for (t in _agg.transactions) { profit += t }; return profit",
"reduce_script" : "profit = 0; for (a in _aggs) { profit += a }; return profit"
}
}
}
}
Top hits Aggregation
最高匹配权值聚合——跟踪聚合中相关性最高的文档。
该聚合一般用做 sub-aggregation,以此来聚合每个桶中的最高匹配的文档。
配置参数
- from:最匹配的结果中的文档个数偏移
- size:top matching hits 返回的最大文档个数(default 3)
- sort:最匹配的文档的排序方式
{
"aggs": {
"top-tags": {
"terms": {
"field": "tags",
"size":
},
"aggs": {
"top_tag_hits": {
"top_hits": { //用 tags 字段分组,每个 tag(即一个分组)只显示最后一个问题,并且只在 _source 中保留 title 字段
"sort": [
{
"last_activity_date": {
"order": "desc"
}
}
],
"_source": {
"include": [
"title"
]
},
"size" :
}
}
}
}
}
}
//输出
"top_tags_hits": {
"hits": {
"total": ,
"max_score": ,
"hits": [
{
"_index": "stack",
"_type": "question",
"_id": "",
"_score": ,
"_source": {
"title": "Windows port opening"
},
"sort": [ ]
}
]
}
}
Value Count Aggregation(single-value)
值计数聚合——计算聚合文档中某个值的个数。
用于计数的值可以是特定的数值型字段,也可以通过脚本计算而来。
该聚合一般域其它 single-value 聚合联合使用,比如在计算一个字段的平均值的时候,可能还会关注这个平均值是由多少个值计算而来。
配置参数
- field:用于计算的字段
- script:由脚本生成用来计算的 value
{
"aggs" : {
"grades_count" : { "value_count" : { "field" : "grade" } } //计算 grade 字段共有多少个值,和 cardinality 聚合不同的
}
}
aggregation 详解2(metrics aggregations)的更多相关文章
- aggregation 详解4(pipeline aggregations)
概述 管道聚合处理的对象是其它聚合的输出(桶或者桶的某些权值),而不是直接针对文档. 管道聚合的作用是为输出增加一些有用信息. 管道聚合大致分为两类: parent 此类聚合的"输入&quo ...
- aggregation 详解3(bucket aggregation)
概述 桶分聚合不进行权值的计算,他们对文档根据聚合请求中提供的判断条件(比如:{"from":0, "to":100})来进行分组(桶分). 桶分聚合还会额外 ...
- 大数据学习笔记——Spark工作机制以及API详解
Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...
- 【转】UML类图与类的关系详解
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解
centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解 环境准备: 操作系统:centos ...
- Maven-pom.xml详解
(看的比较累,可以直接看最后面有针对整个pom.xml的注解) pom的作用 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵 ...
- 【转】maven核心,pom.xml详解
感谢如下博主: http://www.cnblogs.com/qq78292959/p/3711501.html maven核心,pom.xml详解 什么是pom? pom作为项目对象模型.通过 ...
- view坐标_ _ Android应用坐标系统全面详解
转:http://blog.csdn.net/yanbober/article/details/50419117 1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自 ...
- UML类图与类的关系详解
摘自:http://www.uml.org.cn/oobject/201104212.asp UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类 ...
随机推荐
- Balanced Numbers(数位+状压)
题意:求给定区间,一个数的数位上每个奇数出现偶数次,每个偶数出现奇数次,这样数的个数 分析:先考虑状态,但总是想不全,所以要把状态压缩一下,用三进制,0 该数不放 1 放了奇数次 2放了偶数次 dp ...
- 七牛上传Qt版本
最近在找图床,写博客啥的需要.以前的图床好像挂了,搭在BAE上的图床也挂了,可能BAE3.0更新了吧. 花了点时间写了Qt版本 github地址:https://github.com/wzyuliya ...
- C 语言控制台实现五子棋项目
花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋> ...
- Her and his blog
Tonight, I read localhost8080 and some of her husband m67's blog. I found they are so geek and reall ...
- NOIP2005 过河
过河 (river.pas/c/cpp) [问题描述] 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正 ...
- Vijos1404 遭遇战 最短路,dijkstra,堆
P1404遭遇战 标签:[显示标签] 背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分 ...
- 最近升级了一下小老婆(8核 2x8G DDR3 128G SSD)
晒图(笔者的硬件知识属于小白级别, 且看且参考吧): 另外优化一下休眠&虚拟内存功能节省SSD空间: 1. 台式机, 休眠功能基本没必要, 果断关掉 C:\Windows\system32&g ...
- Android之指南针(电子罗盘)学习
点我下载源码 5月12日更新到V5版:http://download.csdn.net/detail/weidi1989/5364243 今天,在小米的开源项目中下载了一个指南针源码学习了一下,感觉不 ...
- Delphi XE5 安卓手机要求
1 ARMv7 的 CPU v6 的肯定不支持. 2 黑屏是因为你的手机 CPU 不支持 NEON 特性.或者是 T2 海思 CPU .这 2 个不支持. 3 系统版本 2.3.3 到 2.3.9 ...
- 引爆公式让你的APP游戏成为下一个“爆款”
在2014年的移动互联网领域,“魔漫相机”是一款值得关注的产品.虽然没有腾讯.百度或阿里巴巴等大资源的支持,但是这款应用一上线就在中国市场发展迅猛,日下载量超过80万次,最高一日达300万次.类似的成 ...