Metrics Aggregations(数值度量聚合)
该系列中的聚合基于以某种方式从正在聚合的文档中提取的值来计算度量。这些值通常从文档的字段中提取(使用字段数据),但也可以使用脚本生成。
数值度量聚合是一种输出数值的特殊类型的度量聚合。一些聚合输出单个数值度量(例如平均值),称为单值度量聚合,另一些输出多个度量值(例如统计数据),称为多值数值度量聚合。单值与多值数值度量聚合的区别是,他们充当某些桶聚合(比如某些桶聚合可以基于每个桶的数值度量对返回的桶进行排序)的直接子聚合时发挥了不同的作用。
avg aggregation(single-value)
均值聚合–基于文档中的某个字段,计算该值在聚合文档中的均值。这些值可以从文档中的特定数字字段中提取,也可以由提供的脚本生成。
假设数据由学生考试成绩(介于0到100之间)的文档组成,我们可以用以下方法对他们的分数进行平均:
POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : {
"avg" : {
"field" : "grade" } }
}
}
// 输出
{
...
"aggregations": {
"avg_grade": {
"value": 75.0
}
}
}
- 配置参数
基于脚本计算平均成绩
POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : {
"avg" : {
"script" : {
"source" : "doc.grade.value"
}
}
}
}
}
- value script
假如这次考试难度超过了学生的平均水平,需要对成绩进行修正。可以通过如下方式获取新的均值:
POST /exams/_search?size=0
{
"aggs" : {
"avg_corrected_grade" : {
"avg" : {
"field" : "grade",
"script" : {
"lang": "painless",
"source": "_value * params.correction",
"params" : {
"correction" : 1.2
}
}
}
}
}
}
- Missing value
missing
参数定义了在文档值缺失情况下的处理方式。默认情况下它们会被忽略,但是也可以认为有某个特定的值。
POST /exams/_search?size=0
{
"aggs" : {
"grade_avg" : {
"avg" : {
"field" : "grade",
"missing": 10
}
}
}
}
加权均值聚合
用公式可以描述为 ∑(value * weight) / ∑(weight)
一般说的均值可以认为是的具有隐式权重为一的加权平均值。
权重均值参数
参数名称 | 描述 | 是否需要默认值 |
---|---|---|
value | 提供值的字段或脚本的配置 | 必需 |
weight | 提供权重的字段或脚本的配置 | 必需 |
format | 响应数字格式 | 可选 |
value_type | 纯脚本或未映射字段的值的提示 | 可选 |
示例
文档中有一个 grade 字段,值为 0-100,以及一个 weight 字段保存了数字类型的权重,可以通过如下方式计算权重平均值:
POST /exams/_search
{
"size": 0,
"aggs" : {
"weighted_grade": {
"weighted_avg": {
"value"