percentiles 百分位聚合
百分位数显示出现一定百分比的观测值的点。
默认统计的百分位数为:[ 1, 5, 25, 50, 75, 95, 99 ]
请求示例:GET latency/_search
{
"size": 0,
"aggs": {
"load_time_outlier": {
"percentiles": {
"field": "load_time"
}
}
}
} 返回: {
...
"aggregations": {
"load_time_outlier": {
"values": {
"1.0": 5.0,
"5.0": 25.0,
"25.0": 165.0,
"50.0": 445.0,
"75.0": 725.0,
"95.0": 945.0,
"99.0": 985.0
}
}
}
} 查询统计加载时间load_time的百分位数情况,可知50%情况为445毫秒,比445毫秒快的不到50%,其余都是比445毫秒慢的,75%,95%,99%类似;
percentileRanks 百分位数排名
百分位数排名显示低于特定值的观测值的百分比。例如,如果某个值大于或等于观测值的 95%,则称为第 95 百分位排名。
假设您的数据由网站加载时间组成。您可能有一个服务协议,即95%的页面加载在500毫秒内完成,99%的页面加载在600毫秒内完成。
请求示例:
GET latency/_search
{
"size": 0,
"aggs": {
"load_time_ranks": {
"percentile_ranks": {
"field": "load_time",
"values": [ 500, 600 ]
}
}
}
} 统计加载时间为500,600的百分排名情况;
返回:
{
...
"aggregations": {
"load_time_ranks": {
"values": {
"500.0": 90.01,
"600.0": 100.0
}
}
}
} 可知,500毫秒的占比为90.01%,600毫秒的为100%
根据此信息,您可以确定您正在达到 99% 的加载时间目标,但未完全达到 95% 的加载时间目标
medianAbsoluteDeviation 中位数绝对偏差
应用于数值类字段
中位数绝对偏差是可变性的度量。它是一个可靠的统计量,这意味着它可用于描述可能具有异常值或可能不正态分布的数据。对于此类数据,它可以比标准偏差更具描述性。
假设我们的数据以一到五星的比例表示产品评论。此类评论通常被总结为平均值,这很容易理解,但并不描述评论的可变性。估计中位数绝对偏差可以深入了解评论之间的差异。
在此示例中,我们有一个平均评级为 3 星的产品。让我们看一下其评级的绝对偏差中位数,以确定它们之间的差异有多大
请求示例:
GET reviews/_search
{
"size": 0,
"aggs": {
"review_average": {
"avg": {
"field": "rating"
}
},
"review_variability": {
"median_absolute_deviation": {
"field": "rating"
}
}
}
} 返回:
{
...
"aggregations": {
"review_average": {
"value": 3.0
},
"review_variability": {
"value": 2.0
}
}
} 可知中位数为3.0,即评价的中位数为三星,而可变性为2,与中位数相差不多,说明此评价的可变性大;
cardinality 基数聚合计算非重复值的近似计数的指标聚合类似去重请求示例:
POST /sales/_search?size=0
{
"aggs": {
"type_count": {
"cardinality": {
"field": "type"
}
}
}
} 返回:
{
...
"aggregations": {
"type_count": {
"value": 3
}
}
} 可知,不同的商品种类有3种;
topHits 点滴聚合指标聚合器跟踪要聚合的最相关的文档。此聚合器旨在用作子聚合器,以便可以聚合每个存储桶中匹配的顶级文档。不推荐用作最外层聚合支持nested嵌套聚合和reverse_nested反向嵌套聚合聚合后,每一个聚合Bucket里面仅返回指定顺序的前N条数据。应用场景:
统计每个班级中的期末成绩总分最高的两个人,我们可以先按班级聚合,再应用top_hits统计按总分排序详细参照:官网 scriptedMetric 脚本度量聚合
应用script脚本,自定义聚合条件,高度自制请求示例:
POST ledger/_search?size=0
{
"query": {
"match_all": {}
},
"aggs": {
"profit": {
"scripted_metric": {
"init_script": "state.transactions = []",
"map_script": "state.transactions.add(doc.type.value == 'sale' ? doc.amount.value : -1 * doc.amount.value)",
"combine_script": "double profit = 0; for (t in state.transactions) { profit += t } return profit",
"reduce_script": "double profit = 0; for (a in states) { profit += a } return profit"
}
}
}
} 返回:
{
"took": 218,
...
"aggregations": {
"profit": {
"value": 240.0
}
}
} 上面的聚合演示了如何使用脚本聚合计算销售和成本交易的总利润。



