数据准备:

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 聚合操作的更多相关文章

  1. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg

    分析 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中的GROUP BY但是功能更强大. 举个例子,让我们找到所有职员中最大 ...

  2. Elasticsearch聚合操作报错解决办法

    1. 当根据一个类型为text的字段idc进行聚合操作时,查询语句如下: { "aggs": { "top_10_states": { "terms& ...

  3. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

  4. ElasticSearch聚合分析

    聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频 ...

  5. ElasticSearch 学习记录之ES几种常见的聚合操作

    ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...

  6. 04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作

        前面大概了解了一下elasticsearch的数据存储和数据的查询.现在学习一下,es的复杂操作.     官网相关文档地址:https://www.elastic.co/guide/en/e ...

  7. Elasticsearch的聚合操作

    ES的聚合: Metrics 简单的对过滤出来的数据集进行avg,max等操作,是一个单一的数值. bucket 可以理解为将过滤出来的数据集按条件分成多个小数据集,然后Metrics会分别作用在这些 ...

  8. ElasticSearch聚合

    前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...

  9. ElasticSearch 聚合函数

    一.简单聚合 桶 :简单来说就是满足特定条件的文档的集合. 指标:大多数 指标 是简单的数学运算(例如最小值.平均值.最大值,还有汇总),这些是通过文档的值来计算. 桶能让我们划分文档到有意义的集合, ...

随机推荐

  1. android网络监听

    http://blog.csdn.net/mxiaoyem/article/details/50857008 http://blog.csdn.net/ke1vin/article/details/5 ...

  2. HTML5时代的纯前端上传图片预览及严格图片格式验证函数(转载)

    原文地址:http://www.2cto.com/kf/201401/274752.html 一.要解决什么样的问题? 在写这个函数之前,有们童鞋在群里问如何纯前端严格验证图片格式.这在html5时代 ...

  3. 鲁棒图(Robustness Diagram)

    鲁棒图与系统需求分析 鲁棒图(Robustness Diagram)是由Ivar Jacobson于1991年发明的,用以回答“每个用例需要哪些对象”的问题.后来的UML并没有将鲁棒图列入UML标准, ...

  4. rolllup巧用

    --构造环境drop table dept purge;drop table emp purge;create table dept as select * from scott.dept;creat ...

  5. 025__name__变量和目录结构规范

    ##__name__变量被其他模块调用的时候就不是main,所以就有这种使用if __name__=='__main__': ##软件目录结构规范为什么要设计好目录结构?"设计项目目录结构& ...

  6. TunSafe使用分享

    体验还是很棒的,关于使用中遇到的一些问题在此分享下 官网打不开? 这个真的很不解,科学以后遇到的, 后来在手机上同样的环境测试可以打开 最后居然使用ie浏览器解决了,看来是国产浏览器在作怪 ie终于打 ...

  7. Mabatis入门案例

    log4j.properties # Global logging configuration #\u5728\u5f00\u53d1\u9636\u6bb5\uff0c\u8bbe\u7f6e\u4 ...

  8. 解决 git pull 报错 fatal: refusing to merge unrelated histories

    我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传. 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法p ...

  9. redis-desktop-manager 安装——redis的可视化工具

    一.redis-desktop-manager介绍 Redis可视化工具之一,RedisDesktopManager是开源的,托管在github上:https://github.com/uglide/ ...

  10. ssh启动失败

    调试了两个小时.ssh启动不了. service ssh start /etc/init.d/ssh start 都尝试了,还是没法启动. [ 是否启动,可以命令行: ps -s | grep ssh ...