Percentile Ranks Aggregation

Percentile Ranks Aggregation

  一个multi-value指标聚合,它通过从聚合文档中提取数值来计算一个或多个百分比。这些值可以从特定数值字段中提取,也可以由提供的脚本生成。

    注意:请参考百分比(通常)近视值(percentiles are (usually approximate))和压缩(Compression)以获得关于近视值的建议和内存使用的百分比排位聚合。

  百分比排位展示那些在某一值之下的观测值的百分比。例如,假如某一直大于等于被观测值的95%,则称其为第95百分位数。

  假设你的数据由网页加载时间组成。你可能有一个服务协议,95%页面需要在15ms加载完全,99%页面在30ms加载完全。

  让我们看一下代表加载时间的百分位数:

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

  【1】load_time必须是一个数值字段

  应答看起来像这个样子:

{
    ...

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

  从这些信息你可以确定,你已经达到了99%的加载时间目标,但没有达到95%的加载时间目标。

Script

  百分位数度量支持脚本。例如,假如加载时间是在毫秒级,当我们想指定值在秒级,我们可以使用脚本来实时转化它们: 

{
    "aggs" : {
        "load_time_outlier" : {
            "percentile_ranks" : {
                "values" : [3, 5],
                "script" : {
                    "lang": "painless",
                    "inline": "doc[‘load_time‘].value / params.timeUnit", 【1】
                    "params" : {
                        "timeUnit" : 1000   【2】
                    }
                }
            }
        }
    }
}

  【1】field参数被一个script参数替代,使用脚本生成计算百分位数的值。

  【2】脚本支持参数化输入,就像其它任何脚本一样

  通过painless脚本语言和无脚本参数将script参数翻译为一个inline脚本。要使用文件脚本,使用以下语法:

{
    "aggs" : {
        "load_time_outlier" : {
            "percentile_ranks" : {
                "values" : [3, 5],
                "script" : {
                    "file": "my_script",
                    "params" : {
                        "timeUnit" : 1000
                    }
                }
            }
        }
    }
}

  TIP:索引脚本通过id参数替代file参数

HDR Histogram

  警告:该功能是实验性的,并且在将来的版本中可能被修改或者完全移除。Elastic采用最大努力来解决任何问题,但是试验功能不受SLA官方GA功能的支持。

  HDR Histogram(高动态范围柱状图)是一种替代实现,在计算延迟测量的百分比数量级时可能很有用,因为它比t-digest实现更快,同时占用更大的内存空间。该实现维持固定的较差的百分比错误(指定为有效数字的数量)。这意味着如果在柱状图中设置3位有效数字的数据被记录在1微妙至1小时(3600,000,000微妙)之间,它将保持从1微妙值增加到为最大跟踪值(1小时)保留1毫秒和3.6分钟(或更好)分辨率。

  HDR Histogram可以通过在request中指定method参数来使用:

{
    "aggs" : {
        "load_time_outlier" : {
            "percentile_ranks" : {
                "field" : "load_time",
                "values" : [15, 30],
                "hdr": { 【1】
                  "number_of_significant_value_digits" : 3 【2】
                }
            }
        }
    }
}

  【1】hdr对象表示应该使用HRD Histogram来计算百分位数,并且可以在对象内部指定该算法的具体设置。

  【2】number_of_significant_value_digits表示以有效数字值表示柱状图的分辨率。

  HDR Histogram仅仅支持绝对值,假如传递的是一个相对值则将错误。假如值范围不知道,使用HDR Histogram也不是一个好的主意,因为它将导致高内存使用。

Missing value

  missing参数定义该如何处理缺省值的文档。默认情况下,他们将被忽略,但是假如他们已经有一个值了,它也可能被处理。

{
    "aggs" : {
        "grade_ranks" : {
            "percentile_ranks" : {
                "field" : "grade",
                "missing": 10 【1】
            }
        }
    }
}

  【1】在grade字段中没有值的文档将和有值10的文档放入相同的bucket中。

原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-aggregations-metrics-percentile-rank-aggregation.html

时间: 2024-10-12 20:51:06

Percentile Ranks Aggregation的相关文章

Elasticsearch 之聚合分析入门

本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合. 首先来看下聚合(Aggregation): 什么是 Aggregation? 首先举一个生活中的例子,这个是京东的搜索界面,在搜索框中输入"华为"进行搜索,就会得到如上界面,搜索框就是我们常用的搜索功能,而下面这些,比如分类.热点.操作系统.CPU 类型等是根据 ES 的聚合分析获得的相关结果. 看完上面这个例子,下面来看下聚合的定义: ES 除了搜索以外,

Elasticsearch学习之深入聚合分析四---案例实战

1. 需求:比如有一个网站,记录下了每次请求的访问的耗时,需要统计tp50,tp90,tp99 tp50:50%的请求的耗时最长在多长时间tp90:90%的请求的耗时最长在多长时间tp99:99%的请求的耗时最长在多长时间 PUT /website { "mappings": { "logs": { "properties": { "latency": { "type": "long"

利用开源架构ELK构建分布式日志系统

本文介绍了如何使用成熟的经典架构ELK(即Elastic search,Logstash和Kibana)构建分布式日志监控系统,很多公司采用该架构构建分布式日志系统,包括新浪微博,freewheel,畅捷通等. 背景日志,对每个系统来说,都是很重要,又很容易被忽视的部分.日志里记录了程序执行的关键信息,ERROR和WARNING信息等等.我们可以根据日志做很多事情,做数据分析,系统监控,排查问题等等 .但是,任何一个中大型系统都不可能是单台Server,日志文件散落在几十台甚至成千上万台Serv

aggregation 详解2(metrics aggregations)

概述 权值聚合类型从需要聚合的文档中取一个值(value)来计算文档的相应权值(比如该值在这些文档中的max.sum等). 用于计算的值(value)可以是文档的字段(field),也可以是脚本(script)生成的值. 数值权值聚合是特殊的权值聚合类型,因为它的输出权值也是数字. 数值权值聚合(注意分类只针对数值权值聚合,非数值的无此分类)输出单个权值的,叫做 single-value numeric metrics,其它生成多个权值(比如:stats)的被叫做 multi-value num

MongoDB 学习笔记之 Aggregation Pipeline实战实现inner join

 Aggregation Pipeline实战实现inner join: leftT集合: comments集合: 现在我们要用aggregation实现inner join db.comments.aggregate([{ $lookup: { from:"leftT", localField:"timestamp", foreignField:"timestamp", as: "timestampCol" }}, {$un

Java Aggregation (HAS-A relationship)

Aggregation (HAS-A) HAS-A relationship is based on usage, rather than inheritance. In other words, class A has-a relationship with class B, if code in class A has a reference to an instance of class B. example class Student { String name; Address ad;

aggregation 详解4(pipeline aggregations)

概述 管道聚合处理的对象是其它聚合的输出(桶或者桶的某些权值),而不是直接针对文档. 管道聚合的作用是为输出增加一些有用信息. 管道聚合大致分为两类: parent 此类聚合的"输入"是其[父聚合]的输出,并对其进行进一步处理.一般不生成新的桶,而是对父聚合桶信息的增强. sibling 此类聚合的输入是其[兄弟聚合]的输出.并能在同级上计算新的聚合. 管道聚合通过 buckets_path 参数指定他们要进行聚合计算的权值对象,buckets_path 参数有其自己的使用语法. 管道

aggregation 详解3(bucket aggregation)

概述 桶分聚合不进行权值的计算,他们对文档根据聚合请求中提供的判断条件(比如:{"from":0,  "to":100})来进行分组(桶分). 桶分聚合还会额外返回每一个桶内文档的个数. 桶分聚合可以包含子聚合——sub-aggregations(权值聚合不能包含子聚合),子聚合将会应用到由父(parent)聚合产生的每一个桶上. 桶分聚合根据聚合条件,可以只定义输出一个桶:也可以输出多个:还可以在根据聚合条件动态确定桶个数(比如:terms aggregation

机器学习技法课之Aggregation模型

Courses上台湾大学林轩田老师的机器学习技法课之Aggregation 模型学习笔记. 混合(blending) 本笔记是Course上台湾大学林轩田老师的<机器学习技法课>的学习笔记,用于学习之后的一些总结. 首先,对于Aggregation模型,其基本思想就是使用不同的 g t 来合成最后的预测模型 G t . 对于合成的方式主要有四种: 方法 数学描述 1. 选择.选择最值得可信的 g t 来当做最终的模型,而这个 gt 可以使用validation set 来进行选择 $$G(x)