专栏首页cwl_JavaElasticSearch(7.2.2)-es聚合查询之桶聚合

ElasticSearch(7.2.2)-es聚合查询之桶聚合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102812520

简介:⼿把⼿玩转es的聚合查询之桶聚合

ES聚合分析

  • 聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强⼤的聚合分析能⼒。
  • 对⼀个数据集求最⼤、最⼩、和、平均值等指标的聚合,在ES中称为指标聚合
  • 关系型数据库中除了有聚合函数外,还可以对查询出的数据进⾏分组group by,再在组上进⾏指标聚合。在ES中称为桶聚合

Terms Aggregation 根据字段项分组聚合

  • ⽕箭队根据年龄进⾏分组
POST /nba/_search
{
	"query": {
		"term": {
			"teamNameEn": {
				"value": "Rockets"
			}
		}
	},
	"aggs": {
		"aggsAge": {
			"terms": {
				"field": "age",
				"size": 10
			}
		}
	},
	"size": 0
}

order 分组聚合排序

  • ⽕箭队根据年龄进⾏分组,分组信息通过年龄从⼤到⼩排序 (通过指定字段)
POST /nba/_search
{
	"query": {
		"term": {
			"teamNameEn": {
				"value": "Rockets"
			}
		}
	},
	"aggs": {
		"aggsAge": {
			"terms": {
				"field": "age",
				"size": 10,
				"order": {
					"_key": "desc"
				}
			}
		}
	},
	"size": 0
}
  • ⽕箭队根据年龄进⾏分组,分组信息通过⽂档数从⼤到⼩排序 (通过⽂档数)
POST /nba/_search
{
	"query": {
		"term": {
			"teamNameEn": {
				"value": "Rockets"
			}
		}
	},
	"aggs": {
		"aggsAge": {
			"terms": {
				"field": "age",
				"size": 10,
				"order": {
					"_count": "desc"
				}
			}
		}
	},
	"size": 0
}
  • 每⽀球队按该队所有球员的平均年龄进⾏分组排序 (通过分组指标值)
POST /nba/_search
{
	"aggs": {
		"aggsTeamName": {
			"terms": {
				"field": "teamNameEn",
				"size": 30,
				"order": {
					"avgAge": "desc"
				}
			},
			"aggs": {
				"avgAge": {
					"avg": {
						"field": "age"
					}
				}
			}
		}
	},
	"size": 0
}

筛选分组聚合

  • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (指定值列表)
POST /nba/_search
{
	"aggs": {
		"aggsTeamName": {
			"terms": {
				"field": "teamNameEn",
				"include": ["Lakers", "Rockets", "Warriors"],
				"exclude": ["Warriors"],
				"size": 30,
				"order": {
					"avgAge": "desc"
				}
			},
			"aggs": {
				"avgAge": {
					"avg": {
						"field": "age"
					}
				}
			}
		}
	},
	"size": 0
}
  • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (正则表达式匹配值)
POST / nba / _search
{
	"aggs": {
		"aggsTeamName": {
			"terms": {
				"field": "teamNameEn",
				"include": "Lakers|Ro.*|Warriors.*",
				"exclude": "Warriors",
				"size": 30,
				"order": {
					"avgAge": "desc"
				}
			},
			"aggs": {
				"avgAge": {
					"avg": {
						"field": "age"
					}
				}
			}
		}
	},
	"size": 0
}

Range Aggregation 范围分组聚合

  • NBA球员年龄按20,20-35,35这样分组
POST /nba/_search
{
	"aggs": {
		"ageRange": {
			"range": {
				"field": "age",
				"ranges": [{
						"to": 20,
						"key": "A"
					},
					{
						"from": 20,
						"to": 35,
						"key": "B"
					},
					{
						"from": 35,
						"key": "C"
					}
				]
			}
		}
	},
	"size": 0
}

Date Range Aggregation 时间范围分组聚合

  • NBA球员按出⽣年⽉分组
POST /nba/_search
{
	"aggs": {
		"birthDayRange": {
			"date_range": {
				"field": "birthDay",
				"format": "MM-yyy",
				"ranges": [{
						"to": "01-1989"
					},
					{
						"from": "01-1989",
						"to": "01-1999"
					},
					{
						"from": "01-1999",
						"to": "01-2009"
					},
					{
						"from": "01-2009"
					}
				]
			}
		}
	},
	"size": 0
}

Date Histogram Aggregation 时间柱状图聚合

  • 按天、⽉、年等进⾏聚合统计。可按 year (1y), quarter (1q), month (1M), week (1w), day(1d), hour (1h), minute (1m), second (1s) 间隔聚合
  • NBA球员按出⽣年分组
POST /nba/_search
{
	"aggs": {
		"birthday_aggs": {
			"date_histogram": {
				"field": "birthDay",
				"format": "yyyy",
				"interval": "year"
			}
		}
	},
	"size": 0
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux安装Mysql数据库

    声明: 如果您有更好的技术与作者分享,或者商业合作;请访问作者个人网站 http://www.esqabc.com/view/message.html 留言...

    Mr.Vv
  • APP端测试系列(3)——客户端安全

    在APP测试的第三部分之前插播一个新闻《自学黑客薅羊毛,薅出玫瑰金手镯》,一个通过测试APP客户端,绕过验证注册二十万账号,从而获利六万余元最终喜获金手镯的...

    Jayway
  • 搞不懂,Synchronized锁在Spring事务管理下,为啥还线程不安全?

    简单来说:多线程跑一个使用synchronized关键字修饰的方法,方法内操作的是数据库,按正常逻辑应该最终的值是1000,但经过多次测试,结果是低于1000。...

    IT大咖说
  • 缓存穿透、缓存击穿和缓存雪崩实践

    我们使用缓存的主要目是提升查询速度和保护数据库等稀缺资源不被占满。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数...

    哲洛不闹
  • 首届中文NL2SQL挑战赛:千支队伍参赛,国防科大夺冠

    【导语】10月12日,追一科技主办的首届中文NL2SQL挑战赛在激烈的决赛中落下帷幕,冠军由国防科技大学学生组成的「不上90不改名字」队伍获得。此次比赛是中文N...

    AI科技大本营
  • linux系统MySQL主从同步--使用binlog日志方式

    声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html ...

    Mr.Vv
  • 1.1.5 、网站分析的数据来源与划分

    在这里,将网站分析的数据分成两个大类,一个是内部数据,另一个是第三方数据,如图1-3所示

    GA小站
  • 你不会还在用这8个错误的SQL写法吧?

    分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time...

    macrozheng
  • 计算机学生如何规划好大学四年的学习?

    1.毕业前夕,辅导员让我给学弟学妹们开场讲座,我做完PPT之后,由于公司有事就赶回去,所以没有开成。

    JAVAandPython君
  • 使用腾讯云服务器搭建网站【PHP+MYSQL环境】教程

    到目前为止本人做网站已经有半年了,对服务器配置略有了解。目前基本掌握了在cent os和windows server 2008/2012系统下搭建PHP+MYS...

    用户6475907

扫码关注云+社区

领取腾讯云代金券