5.1.10. 百分数排名聚合

未匹配的标注

百分数排名聚合

一种多值度量标准聚合,该聚合针对从聚合文档中提取的数值计算一个或多个百分数等级。这些值可以从文档中的特定数字字段中提取,也可以由提供的脚本生成。

注意:请参阅(通常)百分位数和压缩以获取有关百分位数秩聚合的近似值和内存使用的建议

百分数等级显示低于特定值的观察值的百分比。例如,如果某个值大于或等于观察值的95%,则它被称为第95个百分位等级。

假设您的数据包含网站加载时间。您可能有一项服务协议,其中95%的页面加载在 500ms 内完成,而99%的页面加载在 600ms 内完成。

让我们看一下代表加载时间的百分比范围:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "field" : "load_time", 
                "values" : [500, 600]
            }
        }
    }
}
  1. load_time字段必须为数字字段

响应将如下所示:

{
    ...

   "aggregations": {
      "load_time_ranks": {
         "values" : {
            "500.0": 55.00000000000001,
            "600.0": 64.0
         }
      }
   }
}

根据此信息,您可以确定达到了99%的 600ms 加载时间目标,但还没有达到95% 500ms 的加载时间目标

Keyed 响应

默认情况下,keyed标志设置为true,将唯一的字符串键与每个存储桶相关联,并将范围作为哈希而不是数组返回。将keyed标志设置为false将禁用此行为:

GET latency/_search
{
    "size": 0,
    "aggs": {
        "load_time_ranks": {
            "percentile_ranks": {
                "field": "load_time",
                "values": [500, 600],
                "keyed": false
            }
        }
    }
}

相应:

{
    ...

    "aggregations": {
        "load_time_ranks": {
            "values": [
                {
                    "key": 500.0,
                    "value": 55.00000000000001
                },
                {
                    "key": 600.0,
                    "value": 64.0
                }
            ]
        }
    }
}

脚本

百分数等级度量标准支持脚本编写。例如,如果我们的加载时间以毫秒为单位,但是我们想以秒为单位指定值,则可以使用脚本即时转换它们:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "values" : [500, 600],
                "script" : {
                    "lang": "painless",
                    "source": "doc['load_time'].value / params.timeUnit", 
                    "params" : {
                        "timeUnit" : 1000   
                    }
                }
            }
        }
    }
}
  1. field 参数替换为 script 参数,该参数使用脚本生成在其上计算百分等级的值
  2. 脚本支持参数化输入,就像其他任何脚本一样

这会将script参数解释为具有painless脚本语言且没有脚本参数的内联脚本。要使用存储的脚本,请使用以下语法:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "values" : [500, 600],
                "script" : {
                    "id": "my_script",
                    "params": {
                        "field": "load_time"
                    }
                }
            }
        }
    }
}

HDR 直方图

此设置公开了HDR直方图的内部实现,语法将来可能会更改。

HDR 直方图 (高动态范围直方图)是一种替代实现,在计算延迟测量的百分位等级时可能会很有用,因为它可以比使用 t-digest 实现更快更大内存占用的权衡。此实现维护一个固定的最坏情况百分比错误(指定为多个有效数字)。这意味着,如果在设置为3个有效数字的直方图中以1微秒至1小时(3,600,000,000微秒)的值记录数据,则对于1毫秒和3.6秒(或更佳)的值,它将保持1微秒的值分辨率)以获取最大跟踪值(1小时)。
可以通过在请求中指定方法参数来使用HDR直方图:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "field" : "load_time",
                "values" : [500, 600],
                "hdr": { 
                  "number_of_significant_value_digits" : 3 
                }
            }
        }
    }
}
  1. hdr 对象指示应使用HDR直方图来计算百分位数,并且可以在对象内部指定此算法的特定设置
  1. number_of_significant_value_digits s指定有效位数的直方图值的分辨率

HDRHistogram 仅支持正值,如果传递负值,则将出错。如果值的范围未知,则使用HDRHistogram也不是一个好主意,因为这可能会导致大量内存使用。

缺失值

missing参数定义应如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "field" : "load_time",
                "values" : [500, 600],
                "missing": 10 
            }
        }
    }
}
  1. load_time字段中没有值的文档将与值为10的文档归入同一存储桶。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/elasticsearch73...

译文地址:https://learnku.com/docs/elasticsearch73...

上一篇 下一篇
CrazyZard
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~