基础函数聚合 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
}
}
}
}