度量聚合
度量聚合会根据某种方法从被聚合的文档中计算度量。度量值通常从文档的字段中提取,但是也可以使用脚本生成。
数字度量聚合是输出数字值的特定度量类型。一些聚合输出单个数字度量(eg:avg),被称为单值数字度量聚合。当聚合充当桶聚合的子聚合时,单值数字度量聚合与多值数字度量聚合的区别便会体现出来。
平均值聚合(指定字段)
/bank/_search?size=0
{
"aggs": {
"avg_balance": { "avg": {"field": "balance"} }
}
}
note:计算bank索引中所有文档的balance字段的索引值。
平均值聚合(指定脚本)
/bank/_search?size=0
{
"aggs": {
"avg_balance": {
"avg": {
"script": {
"source": "doc.balance.value"
}
}
}
}
}
平均值聚合(缺失值处理)
/exams/_search?size=0
{
"aggs" : {
"grade_avg" : {
"avg" : {
"field" : "grade",
"missing": 10
}
}
}
}
note:grade字段没有值的文档将会与值为10的文档落入相同的桶中。
ps:默认情况下,缺值文档将会被忽略,除非它们的字段中拥有值。
最大值聚合(指定字段)
/bank/_search?size=0
{
"aggs": {
"max_age": {"max": {"field": "age"}}
}
}
note:获取bank索引中所有文档中最大的age。
最小值聚合(指定字段)
/bank/_search?size=0
{
"aggs": {
"min_age": {
"min": {
"field": "age"
}
}
}
}
百分比聚合
百分数表示观测值的某一百分比出现的点。
百分数通常用于发现异常值。正态分布中,0.13th与99.87th百分位数表示偏离平均值三个标准差。通常情况下,超出三个标准差的数据被认为是异常的。
当检索一个范围的百分比范围时,可以使用百分位数来判断数据分布。
GET bank/_sarch
{
"size":0,
"aggs": {
"age_outlier": {
"percentiles": {
"field": "age"
}
}
}
}
note:查询bank索引下age字段的百分数位。
ps:默认情况下,百分比度量将会生成一个百分比范围:[1, 5, 25, 50, 75, 95, 99]。
ps:聚合会为默认范围内的每个百分比返回一个计算值。
百分比聚合(指定百分比)
GET bank/_search
{
"size":0,
"aggs": {
"age_outlier": {
"percentiles": {
"field": "age",
"percents": [95, 99, 99.9]
}
}
}
}
百分比聚合(返回数组)
GET bank/_search
{
"size":0,
"aggs": {
"age_outlier": {
"percentiles": {
"field": "age",
"percents": [95, 99, 99.9],
"keyed": false
}
}
}
}
note:默认情况下,将以散列形式返回范围。
统计数据聚合
GET /bank/_search?size=0
{
"aggs": {
"balances_stats": {
"stats": {
"field": "balance"
}
}
}
}
note:获取bank索引的balance字段的统计信息。
求和聚合
GET /bank/_search?size=0
{
"query": {
"constant_score": {
"filter": {
"match": {"state": "IA"}
}
}
},
"aggs": {
"IA_balances": {
"sum": {
"field": "balance"
}
}
}
}
note:求bank索引中,state为IA的文档的balance字段和。
值计数聚合
GET /bank/_search?size=0
{
"aggs":{
"balances_count": { "value_count": {"field": "balance"}}
}
}
note:求bank索引中,balance字段值的数量。