ElasticSearch学习笔记(七) 聚合

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elasticsearch 聚合(Aggregation)是 Elasticsearch 中用于处理搜索结果的重要工具之一。它可以帮助我们对搜索结果进行各种数据统计和分析,以便更好地理解搜索结果数据的特征和趋势。

Elasticsearch 聚合(Aggregation)是 Elasticsearch 中用于处理搜索结果的重要工具之一。它可以帮助我们对搜索结果进行各种数据统计和分析,以便更好地理解搜索结果数据的特征和趋势。

什么是聚合?

聚合是 Elasticsearch 中用于处理搜索结果的重要工具。它可以对搜索结果进行各种数据统计和分析,比如按照价格、品牌、销量等各种数据维度进行分类和汇总,从而实现多维度、多条件的数据分析和展示效果。聚合可以适应不同的业务需求和场景,提供了丰富的聚合类型和选项,使得数据分析和展示更加灵活和可定制化。

聚合的类型

Elasticsearch 中支持的聚合类型包括以下几种:

1. Bucket 聚合

Bucket 聚合是一种根据某些条件将文档分为不同分组的聚合方式。常见的 Bucket 聚合包括:

  • Terms:按照文档中某个字段进行分组,类似于 SQL 中的 group by 语句。
  • Range:按照某个范围将文档进行分组,比如按照价格区间分组。
  • Date Histogram:按照日期进行分组,比如按照月份或者年份分组。
  • Geo Distance:按照地理距离进行分组。
  • Filters:按照多个条件进行分组。

2. Metric 聚合

Metric 聚合是一种用于计算指标的聚合方式,例如平均值、求和、最大值、最小值以及标准差等。常见的 Metric 聚合包括:

  • avg 聚合:计算数值型字段的平均值。
  • sum 聚合:计算数值型字段的总和。
  • max 聚合:找出数值型字段中的最大值。
  • min 聚合:找出数值型字段中的最小值。
  • stats 聚合:计算数值型字段的统计信息,包括平均值、总和、最大值、最小值和样本数等。
  • extended_stats 聚合:在 stats 聚合的基础上,还计算标准差和方差等更详细的统计信息。
  • cardinality 聚合:计算某个字段中不同值的数量。
  • percentiles 聚合:计算数值型字段的百分位数(例如中位数、四分位数等)。
  • percentile_ranks 聚合:计算数值型字段的百分位数排名。这个聚合操作可以用于确定一个值在整个数据集中的排名。
  • value_count 聚合:计算某个字段非空值的数量。

3. Pipeline 聚合

Pipeline 聚合是一种将多个聚合操作串联起来进行计算的聚合方式。它可以支持多层级的数据处理和分析,非常适合复杂数据分析场景下的使用。

聚合语法

Elasticsearch 的聚合语法基于 JSON 格式来进行定义和配置。一个聚合语句通常由以下几个部分组成:

  • Aggregation Type:聚合类型,包括 Bucket 聚合、Metric 聚合和 Pipeline 聚合。
  • Field:聚合的字段。
  • Sub-Aggregations:子聚合。
  • Options:聚合选项,比如排序、大小限制等。

例如,下面是一个简单的 Term 聚合的聚合语句:

{
  "aggs": {
    "category": {
      "terms": {
        "field": "category.keyword"
      }
    }
  }
}

该聚合语句将所有文档按照 category.keyword 字段进行分组,并计算每个分组的文档数。

示例

假设我们已经创建了一个名为 product-test 的商品索引,并且该索引中包含以下四个字段:

  • 商品名称(name)
  • 品牌(brand)
  • 商品图片(image)
  • 商品价格(price)
  • 库存数量(quantity)

我们往索引里面准备一批数据

POST /product-test/_bulk
{ "index": { "_id": 1 }}
{ "name": "苹果12 Pro Max","brand":"apple", "image": "https://images.com/iphone12promax.jpg", "price": 4000, "quantity": 50 }
{ "index": { "_id": 2 }}
{ "name": "Samsung Galaxy S21 Ultra","brand":"三星", "image": "https://images.com/SamsungS21.jpg", "price": 6200, "quantity": 100 }
{ "index": { "_id": 3 }}
{ "name": "苹果14 Mini", "brand":"apple","image": "https://images.com/iphone14mini.jpg", "price": 6999, "quantity": 200 }
{ "index": { "_id": 4 }}
{ "name": "苹果14 Pro Max", "brand":"apple","image": "https://images.com/iphone12promax.jpg", "price": 8999, "quantity": 250 }
{ "index": { "_id": 5 }}
{ "name": "华为Mate 40 Pro", "brand":"华为","image": "https://images.com/HuaweiMate40.jpg", "price": 5999, "quantity": 50 }
{ "index": { "_id": 6 }}
{ "name": "小米14", "brand":"小米","image": "https://images.com/xiaomi14.jpg", "price": 5999, "quantity": 50 }

我们使用terms(相当于SQL中的group by语句)将所有数据按照品牌分组,执行一下命令

POST /product-test/_search
{
  "aggs": {
    "brand_bucket":{
       "terms": {         
       "field": "brand"    
     }
    }
  }
}
  • "aggs":表示聚合操作,用于指定需要对哪些字段进行分析。
  • "brand_bucket":聚合操作的名称,可以自定义。在这个示例中,我们使用了 terms 聚合操作,将文档根据 brand 字段进行分组,然后对每个品牌出现的文档数量进行计数。

返回结果
image.png

上述查询结果中,我们可以看到聚合操作的结果 brand_bucket,其中 buckets 数组内包含了所有的计数信息,包括品牌名称 (key) 和出现的文档数量 (doc_count)。

聚合的应用场景

聚合在 Elasticsearch 中具有广泛的应用场景,常见的应用场景包括:

  • 数据分析:通过聚合功能进行数据统计和分析,比如按照价格、品牌、销量等各种数据维度进行分类和汇总,从而实现多维度、多条件的数据分析和展示效果。
  • 搜索导航:聚合可以根据搜索结果中的关键词或属性值对搜索结果进行分组和聚合,从而实现搜索导航和筛选功能。
  • 数据挖掘:聚合可以帮助我们发现数据中的模式和趋势,从而实现更加深入的数据挖掘和分析。
  • 业务报表:通过聚合功能可以快速生成业务报表和分析结果,比如销售额、订单量等业务指标的统计和展示。

通过以上介绍,相信大家对 Elasticsearch 聚合的相关知识有了更深入的了解。在实际使用时,我们要根据具体的业务需求和场景来选择合适的聚合方式,并灵活运用动态聚合功能来实现更加精细化和个性化的数据分析和展示效果。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 搜索推荐 Java
|
9月前
|
数据采集 JSON 数据挖掘
Elasticsearch 的DSL查询,聚合查询与多维度数据统计
Elasticsearch的DSL查询与聚合查询提供了强大的数据检索和统计分析能力。通过合理构建DSL查询,用户可以高效地搜索数据,并使用聚合查询对数据进行多维度统计分析。在实际应用中,灵活运用这些工具不仅能提高查询效率,还能为数据分析提供深入洞察。理解并掌握这些技术,将显著提升在大数据场景中的分析和处理能力。
455 20
|
存储 SQL 监控
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
427 1
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
532 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
存储 缓存 自然语言处理
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
|
缓存 Java API
在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
|
存储 缓存 Java
Elasticsearch 8.X 聚合查询下的精度问题及其解决方案
Elasticsearch 8.X 聚合查询下的精度问题及其解决方案
|
存储 SQL Java
聚合在Elasticsearch中的使用及示例验证
聚合在Elasticsearch中的使用及示例验证
185 0