Q:非洲食人族的酋长吃什么?

percentiles 和 percentiles ranks 的区别

Elasticsearch | 作者 hnj1575565068 | 发布于2018年04月03日 | 阅读数:5135

求解释一下这二者的区别,越详细越好,谢谢各位,不是很理解这二者出现的聚合结果的意义
已邀请:

rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk

赞同来自: hnj1575565068

percentile 百分位统计是用于评估当前数值分布情况的一种统计方法,比如50 percentile 是 98 , 是指 50%的数值都在98以内,那么通过这里你就可以了解你数据的一个分布特征。常见的一个应用是我们制定 SLA 的时候常说 99% 的请求延迟都在100ms 以内,这个时候你就可以用 99 percentile 来查一下,看一下 99 percenttile 的值如果在 100ms 以内,那么恭喜你 SLA 达标了,否则就说明有问题。
 
理解了 percentile,那么 percentile rank 其实就是反向查询,比如我想看一下 100 在当前数值中处于哪一个范围内,你查一下它的 rank,发现是95,那么说明有95%的数值都在100以内。
 
使用这些统计方法的关键在于理解他们背后的含义,api 调用都不是难点,建议去看一些数据分析的文档

strglee

赞同来自:

简单的说 percentiles 求每个百分位上的值
GET test/_search
{
"aggs": {
"load_time": {
"percentiles": {
"field": "time_elapsed",
"percents": [
25,
50,
75
]
}
}
},
"size": 0
}
返回:
{
"aggregations": {
"load_time": {
"values": {
"25.0": 0.01878700251650498,
"50.0": 0.023415930152309007,
"75.0": 0.04491694432103847,
}
}
}
}
代表25分位的值是0.018 50分位的值是0.023 75分位的值是0.044

percentiles ranks 每个值对应的百分位
GET test/_search
{
"aggs": {
"load_time_ranks": {
"percentile_ranks": {
"field": "time_elapsed",
"values": [
0.018788597216649036,
0.023415274596538756,
0.04495252927706034
]
}
}
},
"size": 0
}
返回:
{
"aggregations": {
"load_time": {
"values": {
"0.018788597216649036": 24.963833733606727,
"0.023415274596538756": 49.984294610161264,
"0.04495252927706034": 75.0008668108972,
}
}
}
}

代表0.018的对应25分位 0.023对应50分位 0.044对应75分位(约)
 所以是个相反的关系

要回复问题请先登录注册