数据准备:

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 Studio 2.3.2 下载 - 百度网盘

    Android Studio是一个为Android平台开发程序的集成开发环境,其包含用于构建Android应用所需的所有工具. Android Studio 2.3.2为最新的稳定版(截止到2017年 ...

  2. python nose测试

    前提: python3 安装nose 结果: nose目录下有子目录tests和mybag,在mybag下新建my_age.py, 内部有Students类,age属性. tests目录下写Sutde ...

  3. Linux系统学习之系统启动的5个过程

    Linux 系统启动过程 Linux系统的启动过程可以分为5个阶段: 1. 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动.操作系统接管硬件以后 ...

  4. 【转】winrar命令行详解

    从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下: WinRAR  <命令> -<开关1> -<开关N> <压缩文件> <文件.. ...

  5. 【Leetcode】【Medium】4Sum

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  6. Python学习---同步条件event/队列queue1223

    写在前面: 在使用这些共享API的时候,我们要注意以下几点: 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Proce ...

  7. Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

    本课主题 Master 资源调度的源码鉴赏 资源调度管理 任务调度与资源是通过 DAGScheduler.TaskScheduler.SchedulerBackend 等进行的作业调度 资源调度是指应 ...

  8. memcached 相关

    今天用了下memcached,把一个日志分析结果的大数组缓存起来,由于实时性跟准确性要求不高,所以缓存一周:因为日志越来越多,不缓存的话每次查看页面会比较慢.(其实可以先离线定期计算好结果存起来).以 ...

  9. Alpha Scrum1

    Alpha Scrum1 牛肉面不要牛肉不要面 Alpha项目冲刺(团队作业5) 各个成员在 Alpha 阶段认领的任务 林志松:音乐网页前端页面编写,博客发布 吴沂章:博客编写 林锃寒:前端页面编写 ...

  10. PL/SQL 编程(二)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011685627/article/details/26299399 1    For循环      ...