es avg aggregation - yaokun123/php-wiki GitHub Wiki
一、Avg Aggregation平均聚合
平均聚合的聚合类型是avg
一个单值度量聚合,计算从聚合文档中提取的数值的平均值。这些值可以从文档中的特定数字字段提取,也可以由提供的脚本生成
从文档中的特定数字字段提取
GET company_es/_search
{
"aggs": {
"avg_capital_number": {//这个名字是自己随便取的
"avg": {//聚合类型是avg(平均数)
"field": "capitalNumber"//单值聚合
}
}
}
}
------------------------------返回文档如下---------------------------------------
...
"aggregations" : {
"avg_capital_number" : {//这个名字是搜索的时候定义的
"value" : 454.9986790682733
}
}
缺少参数定义了应该如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值
GET company_es/_search
{
"aggs": {
"avg_capital_number": {
"avg": {
"field": "capitalNumber"
"missing": 10//缺少值处理
}
}
}
}
基于脚本计算平均分数
GET company_es/_search
{
"aggs": {
"avg_capital_number": {
"avg": {
"script": {
"source": "doc.capitalNumber.value"
}
}
}
}
}
------------------------------返回文档如下---------------------------------------
...
"aggregations" : {
"avg_capital_number" : {
"value" : 454.9986790682733
}
}
这将把脚本参数解释为内联脚本,使用简单的脚本语言,没有脚本参数。要使用存储的脚本,请使用以下语法
GET company_es/_search
{
"aggs": {
"avg_capital_number": {
"avg": {
"script": {
"id":"my_script",//存储的脚本id,
"params":{
"field": "capitalNumber"
}
}
}
}
}
}
对分数进行修正,我们可以使用值脚本来得到新的平均值
GET company_es/_search
{
"aggs": {
"avg_capital_number": {
"avg": {
"field": "capitalNumber",
"script": {
"lang": "painless",
"source": "_value * params.correction",
"params":{
"correction" : 1.2
}
}
}
}
}
}
二、Weighted Avg Aggregationedit加权平均聚合
在计算常规平均值时,每个数据点具有相等的“权重”……它对最终值的贡献相等。另一方面,加权平均数对每个数据点的权重不同。每个数据点对最终值的贡献是从文档中提取出来的,或者由脚本提供。
一个普通的平均值可以被认为是一个加权平均值,其中每个值的隐含权值为1
如果我们的文档有一个包含0-100数字分数的“grade”字段和一个包含任意数字权重的“weight”字段,那么我们可以使用下面的方法计算加权平均值
GET company_es/_search
{
"aggs": {
"weighted_avg_capital_number": {
"weighted_avg":{
"value":{
"field": "capitalNumber"//主要聚合字段
},
"weight":{
"field":"cid"//用来加权的字段
}
}
}
}
}
------------------------------返回文档如下---------------------------------------
"aggregations" : {
"weighted_avg_capital_number" : {
"value" : 769.8884338776376
}
}
虽然每个字段允许多个值,但是只允许一个权重。如果聚合遇到一个文档有多个权值(例如,权值字段是一个多值字段),它将抛出一个异常。如果您遇到这种情况,您将需要为weight字段指定一个脚本,并使用该脚本将多个值组合成一个要使用的值
此单一权重将独立应用于从value字段中提取的每个值
值和权重都可以从脚本而不是字段派生。
POST /exams/_search
{
"size": 0,
"aggs" : {
"weighted_grade": {
"weighted_avg": {
"value": {
"script": "doc.grade.value + 1"
},
"weight": {
"script": "doc.weight.value + 1"
}
}
}
}
}
缺少参数定义了应该如何处理缺少值的文档。值和权重的默认行为不同。默认情况下,如果缺少值字段,则忽略文档,聚合将转移到下一个文档。如果缺少权值字段,则假定其权值为1(与正常平均值一样)。可以使用缺少的参数覆盖这两个缺省值
POST /exams/_search
{
"size": 0,
"aggs" : {
"weighted_grade": {
"weighted_avg": {
"value": {
"field": "grade",
"missing": 2
},
"weight": {
"field": "weight",
"missing": 3
}
}
}
}
}