跳到主要内容

基础函数聚合 avg,sum,max,min..

最常用的基础函数算子 avg、max、min、sum, 属于单值度量聚合。

Avg Aggregation 取平均值

例如假设数据由代表学生考试成绩(介于0和100之间)的文件组成,我们可以用以下公式对他们的分数进行平均

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

Sum Aggregation 取总和值

假设数据由代表销售记录的文件组成,我们可以将所有帽子的销售价格加起来

POST /sales/_search?size=0
{
"query" : {
"constant_score" : {
"filter" : {
"match" : { "type" : "hat" }
}
}
},
"aggs" : {
"hat_prices" : { "sum" : { "field" : "price" } }
}
}

Max Aggregation 取最大值

计算所有文档的最大价格

POST /sales/_search?size=0
{
"aggs" : {
"max_price" : { "max" : { "field" : "price" } }
}
}

Min Aggregation 取最小值

计算所有文档的最小价格

POST /sales/_search?size=0
{
"aggs" : {
"min_price" : { "min" : { "field" : "price" } }
}
}

Script

根据脚本计算平均成绩:

POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : {
"avg" : {
"script" : {
"source" : "doc.grade.value"
}
}
}
}
}

脚本参数方式

POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : {
"avg" : {
"script" : {
"id": "my_script",
"params": {
"field": "grade"
}
}
}
}
}
}

Value Script

还可以使用_value从脚本中访问字段值。例如,这将计算所有帽子价格的平方:

POST /sales/_search?size=0
{
"query" : {
"constant_score" : {
"filter" : {
"match" : { "type" : "hat" }
}
}
},
"aggs" : {
"square_hats" : {
"sum" : {
"field" : "price",
"script" : {
"source": "_value * _value"
}
}
}
}
}

Missing value

缺失值处理,如下例 grade 字段中没有值的文档将与值为10的文档属于同一个存储桶。

POST /exams/_search?size=0
{
"aggs" : {
"grade_avg" : {
"avg" : {
"field" : "grade",
"missing": 10
}
}
}
}