Elasticsearch7.4中的avg指标聚合

指标聚合(Metrics Aggregations)一个是以各种方式(in one way or another)从正在参与聚合的文档中提取值进行指标计算的聚合分析家族。这些值通常从文档的字段中提取,或是由脚本生成。
数值型指标聚合一种输出数值的特定类型的指标聚合,输出一个数值的聚合称为single-value numeric metrics aggregation(单一数值指标聚合),生成多个数值的聚合称之为mult-value numeric metrics aggregation(多数值指标聚合)。这两种聚合在参与子聚合的时候才会有不同的作用和区别。

Avg聚合

Avg聚合是对满足条件文档提取的值(文档的字段值或是脚本生成的值)进行平均值运算。
可以对所有的数值类型的文档进行平均值聚合操作。
当我们需要对查询结果中的数值进行平均值统计的时候,可以用Avg聚合。

POST /exams/_search?size=0
{
    "aggs" : {
        "avg_grade" : { "avg" : { "field" : "grade" } }
    }
}

这个例子中是对exams索引中的所有文档的“grade”字段进行平均值计算。
返回结果输出了满足条件的文档的平均值

{
    ...
    "aggregations": {
        "avg_grade": {
            "value": 75.0
        }
    }
}

对查询结果进行平均值统计

在查询体中,aggregation和query进行组合,就是对查询结果进行聚合分析。
比如

GET /test_shape/_search/
{
  "query": {
          "match": {
            "ydxz":{
              "query":"一类工业用地",
              "operator":"and"
            }
          }
  },
  "from":0,
  "size":1,
   "aggs" : {
        "avg_ydmj" : { "avg" : { "field" : "ydmj" } }
    }
}

是对test_shape索引中,所有满足“ydxz”字段的值中含有“一类工业用地”的文档,对其“ydxz”字段进行平均值统计。
返回结果为:
在这里插入图片描述
耗时31ms,共查到1509个目标文档,这些文档的“ydxz”的平均值为9.14321407891015。

基于脚本生成的值进行平均值统计

avg聚合的计算因子可以是文档的字段,也可以是基于某一脚本生成。这些脚本是基于painless脚本语言编写。
在下面的例子中,“script”参数被解析成一个painless脚本语言编写的没有脚本参数的内联脚本。

POST /test_shape/_search?size=0
{
    "aggs" : {
        "avg_ydmj" : {
            "avg" : {
                "script" : {
                    "source" : "doc.ydmj.value"
                }
            }
        }
    }
}

使用存储的脚本生成的值计算平均值

在聚合体中使用存储的脚本之前,先要在集群的状态中增加脚本内容,然后通过ID进行调用。如下面的例子,创建了ID为“my_script”的脚本:

PUT _scripts/my_script
{
  "script": {
    "lang": "painless",
    "source": "params.field"
  }

然后在聚合体中引用该脚本文件:

POST /test_shape/_search?size=0
{
    "aggs" : {
        "avg_ydmj" : {
            "avg" : {
                "script" : {
                    "id": "my_script",
                    "params": {
                        "field": "ydmj"
                    }
                }
            }
        }
    }
}

使用值脚本生成的值计算平均值

我们也可以用value script(值脚本)生成的值来计算平均值

POST /test_shape/_search?size=0
{
    "aggs" : {
        "avg_corrected_ydmj" : {
            "avg" : {
                "field" : "ydmj",
                "script" : {
                    "lang": "painless",
                    "source": "_value * params.correction",
                    "params" : {
                        "correction" : 1.2
                    }
                }
            }
        }
    }
}

利用“params”定义脚本中的需要的参数时,只能为数值(number)、日期(date)、布尔(boolean)类型

缺省值

avg聚合体中的missing产生用以定义满足条件的文档中,如果指定的字段没有值时的替代值。默认情况下,这个参数时忽略的,但是如果该参数有值,则会被采用。

POST /test_shape/_search?size=0
{
    "aggs" : {
        "grade_ydmj" : {
            "avg" : {
                "field" : "ydmj",
                "missing": 10 
            }
        }
    }
}

上面的例子表示,"ydmj"的字段没有值时,用10代替。

注意:如果要对文档中的多个不同的字段计算平均值,通过在aggs聚合体中定义多个avg聚合操作来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值