Elasticsearch 聚合操作
数据准备:
PUT /shop
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
} PUT /shop/_mapping/goods
{
"properties": {
"brand": {
"type": "keyword"
},
"price": {
"type": "float"
},
"model": {
"type": "keyword"
}
}
} POST /shop/goods/_bulk
{"index": {}}
{"price" : 2299.00, "model" : "小米8", "brand" : "小米"}
{"index": {}}
{"price" : 4499.00, "model" : "Mate 20", "brand" : "华为"}
{"index": {}}
{"price" : 3299.00, "model" : "小米Mix3", "brand" : "小米"}
{"index": {}}
{"price" : 1199.00, "model" : "荣耀9i", "brand" : "华为"}
{"index": {}}
{"price" : 2799.00, "model" : "R17", "brand" : "OPPO"}
{"index": {}}
{"price" : 729.00, "model" : "红米6", "brand" : "小米"}
{"index": {}}
{"price" : 2799.00, "model" : "X23", "brand" : "VIVO"}
{"index": {}}
{"price" : 1799.00, "model" : "K1", "brand" : "OPPO"}
一、聚合为桶
按照手机的品牌brand划分为桶
查询指令:
GET /shop/_search
{
"size": 0,
"aggs": {
"brand_aggs": {
"terms": {
"field": "brand"
}
}
}
}
- size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
- aggs:声明这是一个聚合查询,是aggregations的缩写
- popular_colors:给这次聚合起一个名字,任意。
- terms:划分桶的方式,这里是根据词条划分
- field:划分桶的字段
查询结果:
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 8,
"max_score": 0,
"hits": []
},
"aggregations": {
"brand_aggs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "小米",
"doc_count": 3
},
{
"key": "OPPO",
"doc_count": 2
},
{
"key": "华为",
"doc_count": 2
},
{
"key": "VIVO",
"doc_count": 1
}
]
}
}
}
- hits:查询结果为空,因为我们设置了size为0
- aggregations:聚合的结果
- brand_aggs:我们定义的聚合名称
- buckets:查找到的桶,每个不同的brand字段值都会形成一个桶
- key:这个桶对应的brand字段的值
- doc_count:这个桶中的文档数量
二、桶内度量
为聚合结果添加求价格平均值的度量
查询指令:
GET /shop/_search
{
"size": 0,
"aggs": {
"brand_aggs": {
"terms": {
"field": "brand"
},
"aggs": {
"price_aggs": {
"avg": {
"field": "price"
}
}
}
}
}
}
- aggs:我们在上一个aggs(brand_aggs)中添加新的aggs。可见度量也是一个聚合
- price_aggs:聚合的名称
- avg:度量的类型,这里是求平均值
- field:度量运算的字段
查询结果:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 8,
"max_score": 0,
"hits": []
},
"aggregations": {
"brand_aggs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "小米",
"doc_count": 3,
"price_aggs": {
"value": 2109
}
},
{
"key": "OPPO",
"doc_count": 2,
"price_aggs": {
"value": 2299
}
},
{
"key": "华为",
"doc_count": 2,
"price_aggs": {
"value": 2849
}
},
{
"key": "VIVO",
"doc_count": 1,
"price_aggs": {
"value": 2799
}
}
]
}
}
}
可以看到每个桶中都有自己的 price_aggs 字段,这是度量聚合的结果
Elasticsearch 聚合操作的更多相关文章
- elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg
分析 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中的GROUP BY但是功能更强大. 举个例子,让我们找到所有职员中最大 ...
- Elasticsearch聚合操作报错解决办法
1. 当根据一个类型为text的字段idc进行聚合操作时,查询语句如下: { "aggs": { "top_10_states": { "terms& ...
- Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作
之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...
- ElasticSearch聚合分析
聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频 ...
- ElasticSearch 学习记录之ES几种常见的聚合操作
ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...
- 04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作
前面大概了解了一下elasticsearch的数据存储和数据的查询.现在学习一下,es的复杂操作. 官网相关文档地址:https://www.elastic.co/guide/en/e ...
- Elasticsearch的聚合操作
ES的聚合: Metrics 简单的对过滤出来的数据集进行avg,max等操作,是一个单一的数值. bucket 可以理解为将过滤出来的数据集按条件分成多个小数据集,然后Metrics会分别作用在这些 ...
- ElasticSearch聚合
前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...
- ElasticSearch 聚合函数
一.简单聚合 桶 :简单来说就是满足特定条件的文档的集合. 指标:大多数 指标 是简单的数学运算(例如最小值.平均值.最大值,还有汇总),这些是通过文档的值来计算. 桶能让我们划分文档到有意义的集合, ...
随机推荐
- WPF控件相对位置解析
WPF控件相对位置的获取方法是比较简单的.对于初学者来说,掌握这一技巧的应用,可以帮助以后对WPF的深入学习,而且在实际使用中,这是一个非常常用的方法. 我们知道WPF有着比较灵活的布局方式,关于某个 ...
- C++:关于委托类
转自:http://blog.csdn.net/dadalan/article/details/4041931.vs2010已经支持function/bind,能很好实现委托. [说明] 本文不仅介绍 ...
- double转换long的疑问
在lua(5.1.4)下面测试的时候使用0x100000000的时候出现了问题,打印结果很明显,如下所示: Lua Copyright (C) - Lua.org, PUC-Rio > prin ...
- C/C++文件读取
https://blog.csdn.net/stpeace/article/details/12404925
- S/4HANA业务角色概览之订单到收款篇
大家好我叫Sean Zhang,中文名张正永.目前在S/4HANA产品研发部门任职产品经理,而这一阶段要从2017年算起,而在那之前接触更多还是技术类的,比如做过iOS.HANA.ABAP.UI5等等 ...
- sort给文件按照大小排序
ls -l|sort -n -k5 -n 表示以数值排序-k5 表示以第几列排序还可以用 -t参数指定行内容的分隔符 参考链接:http://www.cnblogs.com/myd620/p/6002 ...
- PyCharm Django项目开发的调试方法
下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...
- python 爬取猫眼下的榜单(一)--单个页面
#!/usr/bin/env python # -*- coding: utf- -*- # @Author: Dang Kai # @Date: -- :: # @Last Modified tim ...
- TensorFlow创建简单的图片分类系统--机器学习
TensorFlow 参考链接 http://www.wolfib.com/Image-Recognition-Intro-Part-1/ 环境要求 linux amd64(必须是64位处理器)pyt ...
- javascript中filter方法
array1.filter(callbackfn[, thisArg]) 參數 參數 定義 array1 必要項. 陣列物件. callbackfn 必要項. 最多接受三個引數的函式. filte ...