Elasticsearch 聚合查询(aggs),Java性能优化面试题集锦
2021/9/9 11:33:50
本文主要是介绍Elasticsearch 聚合查询(aggs),Java性能优化面试题集锦,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
{ “price” : 25000, “color” : “blue”, “make” : “ford”, “sold” : “2014-02-12” }
[]( )聚合为桶 ----------------------------------------------------------------- 首先,我们按照 汽车的颜色`color`来划分`桶`
GET /cars/_search
{
"size" : 0, "aggs" : { "popular_colors" : { "terms" : { "field" : "color" } } }
}
* size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率 * aggs:声明这是一个聚合查询,是aggregations的缩写 * popular\_colors:给这次聚合起一个名字,任意。 * terms:划分桶的方式,这里是根据词条划分 * field:划分桶的字段 结果: ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210314103126936.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70) []( )桶内度量 ----------------------------------------------------------------- 前面的例子告诉我们每个桶里面的文档数量,但是我们需要更复杂的文档度量,我们需要告诉Elasticsearch`使用哪个字段`,`使用何种度量方式`进行运算,这些信息要嵌套在`桶`内,`度量`的运算会基于`桶`内的文档进行 现在,为刚刚的聚合结果添加 **求价格平均值的度量**:
GET /cars/_search
{
"size" : 0, "aggs" : { "popular_colors" : { "terms" : { "field" : "color" }, "aggs":{ "avg_price": { "avg": { "field": "price" } } } } }
}
* aggs:我们在上一个aggs(popular\_colors)中添加新的aggs。可见`度量`也是一个聚合 * avg\_price:聚合的名称 * avg:度量的类型,这里是求平均值 * field:度量运算的字段 结果: ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=2021031410431889.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70) []( )桶内嵌套桶 ------------------------------------------------------------------ 刚刚的案例中,我们在桶内嵌套度量运算。事实上桶不仅可以嵌套运算, 还可以再嵌套其它桶。也就是说在每个分组中,再分更多组。 比如:我们想统计每种颜色的汽车中,分别属于哪个制造商,按照`make`字段再进行分桶
GET /cars/_search
{
"size" : 0, "aggs" : { "popular_colors" : { "terms" : { "field" : "color" }, "aggs":{ "avg_price": { "avg": { "field": "price" } }, "maker":{ "terms":{ "field":"make" } } } } }
}
* maker:在嵌套的aggs下新添一个桶,叫做maker * terms:桶的划分类型依然是词条 * filed:这里根据make字段进行划分 部分结果: ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210314105158488.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70) []( )划分桶的其它方式 --------------------------------------------------------------------- * `Date Histogram Aggregation`:根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组 * `Histogram Aggregation`:根据数值阶梯分组,与日期类似 * `Range Aggregation`:数值和日期的范围分组,指定开始和结束,然后按段分组 刚刚的案例中,我们采用的是`Terms Aggregation`,即根据词条划分桶。接下来,我们再学习几个比较实用的: **阶梯分桶Histogram Aggregation:** histogram是把数值类型的字段,按照一定的阶梯大小进行分组。你需要指定一个阶梯值(interval)来划分阶梯大小。 计算公式如下:`bucket_key = Math.floor((value - offset) / interval) * interval + offset` 以一件价格450的商品为例,`value:当前数据的值450,offset:起始偏移量,默认为0,interval:阶梯间隔,比如200,`因此你得到的:key = Math.floor((450 - 0) / 200) \* 200 + 0 = 400 案例:对汽车的价格进行分组,指定间隔interval为5000:
GET /cars/_search
{
“size”:0,
“aggs”:{
"price":{ "histogram": { "field": "price", "interval": 5000 } }
}
}
结果: ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210314110135957.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70) 示例:增加一个参数min\_doc\_count为1,过滤文档数量为0的桶
GET /cars/_search
{
“size”:0,
“aggs”:{
"price":{ "histogram": { "field": "price", "interval": 5000, "min_doc_count": 1 } }
}
}
结果: ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210314110250911.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70) ### 最后 这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。 ![image](https://www.www.zyiz.net/i/ll/?i=img_convert/7805d83c42241b9dd545c57087fd4fbb.png) **[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】]( )** **整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~** **你的支持,我的动力;祝各位前程似锦,offer不断!!!** g==,size_16,color_FFFFFF,t_70) ### 最后 这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。 [外链图片转存中...(img-YvK4ZSeh-1631157940303)] **[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】]( )** **整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~** **你的支持,我的动力;祝各位前程似锦,offer不断!!!**
这篇关于Elasticsearch 聚合查询(aggs),Java性能优化面试题集锦的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南