白话Elasticsearch32-深入聚合数据分析之案例实战Terms Aggs 统计哪种颜色电视销量最高

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 白话Elasticsearch32-深入聚合数据分析之案例实战Terms Aggs 统计哪种颜色电视销量最高

20190806092132811.jpg

概述

继续跟中华石杉老师学习ES,第32篇

课程地址https://www.roncoo.com/view/55


Terms Aggregation官方文档

官方文档: 戳这里

详细说明,参考官网即可,下面我们用示例来演示下


案例一 : 统计哪种颜色电视销量最高

模拟数据

创建索引

PUT /tvs
{
  "mappings": {
    "sales": {
      "properties": {
        "price": {
          "type": "long"
        },
        "color": {
          "type": "keyword"
        },
        "brand": {
          "type": "keyword"
        },
        "sold_date": {
          "type": "date"
        }
      }
    }
  }
}


模拟一批数据

POST /tvs/sales/_bulk
{ "index": {}}
{ "price" : 1000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-10-28" }
{ "index": {}}
{ "price" : 2000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-11-05" }
{ "index": {}}
{ "price" : 3000, "color" : "绿色", "brand" : "小米", "sold_date" : "2016-05-18" }
{ "index": {}}
{ "price" : 1500, "color" : "蓝色", "brand" : "TCL", "sold_date" : "2016-07-02" }
{ "index": {}}
{ "price" : 1200, "color" : "绿色", "brand" : "TCL", "sold_date" : "2016-08-19" }
{ "index": {}}
{ "price" : 2000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-11-05" }
{ "index": {}}
{ "price" : 8000, "color" : "红色", "brand" : "三星", "sold_date" : "2017-01-01" }
{ "index": {}}
{ "price" : 2500, "color" : "蓝色", "brand" : "小米", "sold_date" : "2017-02-12" }


原始数据:

20190823153138707.png


统计哪种颜色的电视销量最高

DSL


GET /tvs/sales/_search
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "color"
      }
    }
  }
}


解读:

size:只获取聚合结果,而不要执行聚合的原始数据

aggs:固定语法,要对一份数据执行分组聚合操作

popular_colors:就是对每个aggs,都要起一个名字,自定义,叫啥都行

terms:根据字段的值进行分组

field:根据指定的字段的值进行分组

类比官方介绍

20190821224048317.png


返回结果:


20190821163555642.png


hits.hits:我们指定了size是0,所以hits.hits就是空的,否则会把执行聚合的那些原始数据给你返回回来

aggregations:聚合结果

popular_color:我们指定的某个聚合的名称

buckets:根据我们指定的field划分出的buckets

key:每个bucket对应的那个值

doc_count:这个bucket分组内,有多少个数据


类比官网说明


20190821225036345.png

每种颜色对应的bucket中的数据的数量,其实就是这种颜色的销量

默认的排序规则:按照doc_count降序排序


size 参数 示例

外层size

当我们 外层不加size的时候,会返回执行聚合的那些原始数据


GET /tvs/sales/_search
{
  "aggs": {
    "popular_color": {
      "terms": {
        "field": "color"
      }
    }
  }
}

返回

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 8,
    "max_score": 1,
    "hits": [
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "QzGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 2000,
          "color": "红色",
          "brand": "长虹",
          "sold_date": "2016-11-05"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "PzGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 2000,
          "color": "红色",
          "brand": "长虹",
          "sold_date": "2016-11-05"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "QDGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 3000,
          "color": "绿色",
          "brand": "小米",
          "sold_date": "2016-05-18"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "QjGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 1200,
          "color": "绿色",
          "brand": "TCL",
          "sold_date": "2016-08-19"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "RDGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 8000,
          "color": "红色",
          "brand": "三星",
          "sold_date": "2017-01-01"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "PjGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 1000,
          "color": "红色",
          "brand": "长虹",
          "sold_date": "2016-10-28"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "QTGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 1500,
          "color": "蓝色",
          "brand": "TCL",
          "sold_date": "2016-07-02"
        }
      },
      {
        "_index": "tvs",
        "_type": "sales",
        "_id": "RTGrtGwBCp8vhw_gCmb9",
        "_score": 1,
        "_source": {
          "price": 2500,
          "color": "蓝色",
          "brand": "小米",
          "sold_date": "2017-02-12"
        }
      }
    ]
  },
  "aggregations": {
    "popular_color": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "红色",
          "doc_count": 4
        },
        {
          "key": "绿色",
          "doc_count": 2
        },
        {
          "key": "蓝色",
          "doc_count": 2
        }
      ]
    }
  }
}


当把外层的 size设置为1 ,返回1条执行聚合的那些原始数据


20190821231420264.png

设置为0 ,不返回执行聚合的那些原始数据


20190821231515176.png


terms节点下的size


20190821231625461.png


返回了bucket 中1条数据。

20190821231706415.png


. 不设置时,返回全部的聚合结果 。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
15天前
|
存储 SQL 监控
|
2月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
3月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
121 1
|
4月前
|
存储 数据采集 数据处理
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
176 12
|
5月前
|
缓存 数据处理 数据安全/隐私保护
Elasticsearch索引状态管理实战指南
Elasticsearch索引状态管理实战指南
|
5月前
|
存储 缓存 自然语言处理
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
|
12天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
126 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
下一篇
无影云桌面