ElasticSearch6.x 之分组聚合
数据准备:新建索引my_index,初始化数据
# 创建my_index索引
Put 请求:http://192.168.1.74:9200/my-index/
# 索引数据初始化
PUT请求: http://192.168.1.74:9200/my-index/persion/1
{
"name":"张三",
"age":27,
"gender":"男",
"salary":15000,
"dep":"bigdata"
}
PUT请求: http://192.168.1.74:9200/my-index/persion/2
{
"name":"李四",
"age":26,
"gender":"女",
"salary":15000,
"dep":"bigdata"
}
PUT请求: http://192.168.1.74:9200/my-index/persion/3
{
"name":"王五",
"age":26,
"gender":"男",
"salary":17000,
"dep":"AI"
}
PUT请求: http://192.168.1.74:9200/my-index/persion/4
{
"name":"刘六",
"age":27,
"gender":"女",
"salary":18000,
"dep":"AI"
}
PUT请求: http://192.168.1.74:9200/my-index/persion/5
{
"name":"程裕强",
"age":31,
"gender":"男",
"salary":20000,
"dep":"bigdata"
}
PUT请求: http://192.168.1.74:9200/my-index/persion/6
{
"name":"hadron",
"age":30,
"gender":"男",
"salary":20000,
"dep":"AI"
}
分组聚合之Terms 分组(Terms Aggregation)
【例子】根据薪资水平进行分组,统计每个薪资水平的人数
POST 请求:http://192.168.1.74:9200/my-index/_search/
{
"size": 0,
"aggs": {
"group_count": {
"terms": {"field": "salary"}
}
}
}
【例子】统计上面每个分组的平均年龄
POST请求: http://192.168.1.74:9200/my-index/_search/
{
"size": 0,
"aggs": {
"group_count": {
"terms": {"field": "salary"},
"aggs":{
"avg_age":{
"avg":{"field": "age"}
}
}
}
}
}
分组聚合之Filter分组(Filter Aggregation)
Filter聚合用于过滤器聚合,把满足过滤器条件的文档分到一组。
【例子】计算男人的平均年龄
POST请求: http://192.168.1.74:9200/my-index/_search/
{
"size": 0,
"aggs": {
"group_count": {
"filter": {
"term":{"gender": "男"}
},
"aggs":{
"avg_age":{
"avg":{"field": "age"}
}
}
}
}
}
【例子】统计男女员工的平均年龄
POST请求: http://192.168.1.74:9200/my-index/_search/
{
"size": 0,
"aggs": {
"group_count": {
"filters":{
"filters": [
{"match":{"gender": "男"}},
{"match":{"gender": "女"}}
]
},
"aggs":{
"avg_age":{
"avg":{"field": "age"}
}
}
}
}
}
分组聚合之Range分组(RangeAggregation)
from..to区间范围是[from,to),也就是说包含from点,不包含to点
【例子】查询薪资在[0,10000),[10000,20000),[2000,+无穷大)三个范围的员工数
POST请求: http://192.168.1.74:9200/my-index/_search/
{
"size": 0,
"aggs": {
"group_count": {
"range": {
"field": "salary",
"ranges": [
{"to": 10000},
{"from": 10000,"to":20000},
{"from": 20000}
]
}
}
}
}
【例子】查询发布日期在2016-12-01之前、2016-12-01至2017-01-01、2017-01-01之后三个时间区间的文档数
POST请求:http://192.168.1.74:9200/website/_search/
{
"size": 0,
"aggs": {
"group_count": {
"range": {
"field": "postdate",
"format":"yyyy-MM-dd",
"ranges": [
{"to": "2016-12-01"},
{"from": "2016-12-01","to":"2017-01-01"},
{"from": "2017-01-01"}
]
}
}
}
}
分组聚合之Date分组(Date Aggregation)
专用于日期值的范围聚合。 这种聚合和正常范围聚合的主要区别在于,起始和结束值可以在日期数学表达式中表示,并且还可以指定返回起始和结束响应字段的日期格式。 请注意,此聚合包含from值并排除每个范围的值。
【例子】计算一年前之前发表的博文数和从一年前以来发表的博文总数
POST请求:http://192.168.1.74:9200/website/_search/
{
"size": 0,
"aggs": {
"group_count": {
"range": {
"field": "postdate",
"format":"yyyy-MM-dd",
"ranges": [
{"to": "now-12M/M"},
{"from": "now-12M/M"}
]
}
}
}
}
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。