Avg 聚合
编辑Avg 聚合编辑
一种 单值
指标聚合,用于计算从聚合文档中提取的数值的平均值。 这些值可以从文档中的特定数值字段或 直方图 字段中提取。
假设数据由表示学生考试成绩(0 到 100 分之间)的文档组成,我们可以使用以下方法计算他们的平均分数
response = client.search( index: 'exams', size: 0, body: { aggregations: { avg_grade: { avg: { field: 'grade' } } } } ) puts response
POST /exams/_search?size=0 { "aggs": { "avg_grade": { "avg": { "field": "grade" } } } }
上述聚合计算所有文档的平均成绩。 聚合类型为 avg
,field
设置定义了将计算平均值的文档的数值字段。 以上将返回以下内容
{ ... "aggregations": { "avg_grade": { "value": 75.0 } } }
聚合的名称(上面的 avg_grade
)也用作从返回的响应中检索聚合结果的键。
脚本编辑
假设考试非常难,您需要应用成绩修正。 对 运行时字段 求平均值以获得修正后的平均值
response = client.search( index: 'exams', size: 0, body: { runtime_mappings: { 'grade.corrected' => { type: 'double', script: { source: "emit(Math.min(100, doc['grade'].value * params.correction))", params: { correction: 1.2 } } } }, aggregations: { avg_corrected_grade: { avg: { field: 'grade.corrected' } } } } ) puts response
POST /exams/_search?size=0 { "runtime_mappings": { "grade.corrected": { "type": "double", "script": { "source": "emit(Math.min(100, doc['grade'].value * params.correction))", "params": { "correction": 1.2 } } } }, "aggs": { "avg_corrected_grade": { "avg": { "field": "grade.corrected" } } } }
缺失值编辑
missing
参数定义了如何处理缺少值的文档。 默认情况下,它们将被忽略,但也可以将它们视为具有值。
response = client.search( index: 'exams', size: 0, body: { aggregations: { grade_avg: { avg: { field: 'grade', missing: 10 } } } } ) puts response
直方图字段编辑
当对 直方图字段 计算平均值时,聚合的结果是 values
数组中所有元素的加权平均值,并考虑了 counts
数组中相同位置的数字。
例如,对于以下索引,该索引存储了针对不同网络的具有延迟指标的预聚合直方图
response = client.index( index: 'metrics_index', id: 1, body: { 'network.name' => 'net-1', latency_histo: { values: [ 0.1, 0.2, 0.3, 0.4, 0.5 ], counts: [ 3, 7, 23, 12, 6 ] } } ) puts response response = client.index( index: 'metrics_index', id: 2, body: { 'network.name' => 'net-2', latency_histo: { values: [ 0.1, 0.2, 0.3, 0.4, 0.5 ], counts: [ 8, 17, 8, 7, 6 ] } } ) puts response response = client.search( index: 'metrics_index', size: 0, body: { aggregations: { avg_latency: { avg: { field: 'latency_histo' } } } } ) puts response
PUT metrics_index/_doc/1 { "network.name" : "net-1", "latency_histo" : { "values" : [0.1, 0.2, 0.3, 0.4, 0.5], "counts" : [3, 7, 23, 12, 6] } } PUT metrics_index/_doc/2 { "network.name" : "net-2", "latency_histo" : { "values" : [0.1, 0.2, 0.3, 0.4, 0.5], "counts" : [8, 17, 8, 7, 6] } } POST /metrics_index/_search?size=0 { "aggs": { "avg_latency": { "avg": { "field": "latency_histo" } } } }
对于每个直方图字段,avg
聚合将 values
数组 <1> 中的每个数字与其在 counts
数组 <2> 中的关联计数相乘。 最后,它将计算所有直方图的这些值的平均值,并返回以下结果
{ ... "aggregations": { "avg_latency": { "value": 0.29690721649 } } }