这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战markdown
平均聚合亦即大白话求平均数。用于计算从聚合文档中提取的数值的平均值。这些值能够从文档中的特定数字字段中提取,也能够由提供的脚本生成。好比,咱们想求银行全部员工的平均工资,有下面几种方式:less
请求体:post
POST /bank/_search?size=0
{
"aggs" : {
"avg_salary" : { "avg" : { "field" : "salary" } }
}
}
复制代码
上述聚合计算全部文档的平均工资。聚合类型是avg
平均数,而且field
设置定义了将计算平均值的文档的数字字段为salary
。 返回结果:spa
{
...
"aggregations": {
"avg_salary": {
"value": 30065.89
}
}
}
复制代码
聚合的名称(avg_salary
)用做从返回的响应中检索聚合结果的键。code
根据脚本计算平均工资
请求体:orm
POST /bank/_search?size=0
{
"aggs" : {
"avg_salary" : {
"avg" : {
"script" : {
"source" : "doc.salary.value"
}
}
}
}
}
复制代码
这会将script
参数解释为inline
带有painless
脚本语言(Elasticsearch默认脚本语言)且没有脚本参数的脚本。
返回结果:ip
{
...
"aggregations": {
"avg_salary": {
"value": 30065.89
}
}
}
复制代码
到年末了,这一年的银行业绩很是好,收益远高于同行的平均水平,领导决定须要统一进行整年涨薪20%。咱们就可使用params进行传递参数进去使用脚原本得到新的平均工资:文档
POST /bank/_search?size=0
{
"aggs" : {
"avg_corrected_salary" : {
"avg" : {
"field" : "salary",
"script" : {
"lang": "painless",
"source": "_value * params.increase",
"params" : {
"increase" : 1.2
}
}
}
}
}
}
复制代码
这样就能够得到全体涨薪后平均工资:36079.068get
{
...
"aggregations": {
"avg_salary": {
"value": 36079.068
}
}
}
复制代码
在处理或统计数据中,常常会遇到缺失值的问题。在Elasticsearch中,missing
参数定义应如何处理缺乏值的文档。默认状况下,它们将被忽略,但也可使用missing
将它们视为具备值。能够这样处理缺失值(缺失工资数据的就给它分配当地最低工资标准吧:2200):it
POST /exams/_search?size=0
{
"aggs" : {
"avg_salary" : {
"avg" : {
"field" : "salary",
"missing": 2200
}
}
}
}
复制代码