ElasticSearch学习笔记(二)——对聚合的简单理解

    测试数据请看上一篇博客“笔记(一)”

    聚合的格式一般为

{
	"aggs":{
		"my_agg_name":{
			...
		}
	}
}

    1.若是

{
	"aggs":{
		"my_agg_name":{
			"terms":{
				"field":"city"
			}
		}
	}
}

    相当于

SELECT city,COUNT(*) FROM table GROUP BY city; #分组聚合,会返回buckets

    2.若是

{
	"aggs":{
		"my_agg_name":{
			"avg":{
				"field":"money"
			}
		}
	}
}

    相当于

SELECT AVG(money) FROM table; #度量聚合,会返回一个value

    3.若是

{
	"aggs":{
		"my_agg_name":{
			"terms":{
				"field":"city"
			},
			"aggs":{
				"my_child_agg_name":{
					"avg":{
						"field":"money"
					}
				}
			}
		}
	}
}
    相当于
SELECT city,AVG(money) FROM table GROUP BY city; #分组聚合,会返回buckets,每个bucket里有一个度量聚合
对比1和3,
SELECT city,COUNT(*) FROM table GROUP BY city; #分组聚合,会返回buckets
SELECT city,AVG(money) FROM table GROUP BY city; #分组聚合,会返回buckets,每个bucket里有一个度量聚合
SQL语句差不多,一个是统计每组记录数,一个是统计每组钱的平均值,

但1只用了一次聚合,3在聚合里用了一个子聚合

    4.重点,并列的子聚合!

{
	"aggs":{
		"my_agg_name":{
			"terms":{
				"field":"city"
			},
			"aggs":{
				"my_child_agg_name":{
					"avg":{
						"field":"money"
					}
				},
				"my_child_agg_name2":{
					"max":{
						"field":"money"
					}
				}
			}
			
		}
	}
}

    相当于

SELECT city,AVG(money),MAX(money) FROM table GROUP BY city; #分组聚合,会返回buckets
    结论:并列的子聚合之间其实没有一点关系,都是对上一级的结果进行再操作。

    再举个例子:

{
	"aggs":{
		"my_agg_name":{
			"filter":{  //过滤,查找所有
				"query": {
					"match_all": {}
				}
			},
			"aggs":{
				"name1_0":{  //并列的子聚合互不影响,对上一级的结果进行操作,按age分组,包含key是15和2的桶(只有15的桶)
					"terms":{
						"field":"age",
						"include":[15,2]
					}
				},
				"name1_4":{  //并列的子聚合互不影响,对上一级的结果进行操作,先过滤出年龄是15的,再按money分组(得到5个桶)
					"filter":{
						"query": {
							"term": {
								"age": 15
							}
						}
					},
					"aggs":{
						"name1_4_0":{
							"terms":{
								"field":"money"
							}
						}
					}
				},
				"name1_5":{  //并列的子聚合互不影响,对上一级的结果进行操作,先过滤出钱是4000的,再按age分组(得到1个桶)
					"filter":{
						"query": {
							"term": {
								"money": 4000
							}
						}
					},
					"aggs":{
						"name1_5_0":{
							"terms":{
								"field":"age"
							}
						}
					}
				}
			}
		}
	}
}
    可以在笔记(一)插入的数据中跑跑上述代码,加深理解。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值