首页 > 代码库 > Percentile Ranks Aggregation

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中。

 

Percentile Ranks Aggregation