首页 > 其他分享 >谷粒商城实战笔记-118-全文检索-ElasticSearch-进阶-aggregations聚合分析

谷粒商城实战笔记-118-全文检索-ElasticSearch-进阶-aggregations聚合分析

时间:2024-08-03 09:55:21浏览次数:11  
标签:聚合 进阶 age aggregations 全文检索 字段 文档 terms avg

文章目录


Elasticsearch 的聚合(Aggregations)功能允许用户对数据集进行聚合分析,从而获得数据的摘要信息。

聚合应用于搜索结果,帮助用户理解数据的分布、统计和模式。

一,基本概念

聚合提供了从数据中分组和提取数据的能力。聚合类似于 SQL GROUPBY 和 SQL 聚合函数。

  • 桶(Buckets):桶是聚合的基础,用于将数据分组。每个桶代表一个分组,可以基于不同的标准,如日期范围、数值范围、术语等。
  • 度量(Metrics):度量聚合用于计算数值字段的统计数据,如总和、平均值、最小值、最大值、计数等。
  • 管道聚合(Pipeline Aggregations):管道聚合是对其他聚合结果进行二次处理的聚合,如计算移动平均值、百分比变化等。
  • 子聚合(Sub-Aggregations):子聚合允许在桶内部进一步细分数据,可以嵌套使用。

主要聚合类型

  1. terms:基于字段的术语进行分组,并为每个术语提供度量(如计数)。
  2. histogram:基于数值字段创建数值区间(桶),并计算每个区间内的文档数量。
  3. date_histogram:类似于histogram,但是专门用于日期字段,可以按照年、月、日等时间单位分组。
  4. range:基于指定的范围表达式对数值或日期字段进行分组。
  5. significant_terms:找出在特定数据集中出现的显著术语,与常规terms聚合不同,它基于统计测试来确定哪些术语是显著的。
  6. cardinality:提供一个字段中唯一值的近似计数,这个聚合类型对于大数据集很有用,因为它比普通的unique计数更高效。
  7. avgsumminmax:这些聚合类型分别计算数值字段的平均值、总和、最小值和最大值。
  8. statsextended_stats:提供数值字段的多种统计信息,包括平均值、总和、最小值、最大值、标准差等。

二,实战

以下Demo都是基于对索引bank的搜索。

1,搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情

GET bank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  },
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "age"
      }
    },
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0
}
  • query:定义了搜索的具体条件。

    • match:这是一个全文搜索查询,用于搜索address字段中包含"mill"的文档。
  • aggs:定义了聚合操作,用于对搜索结果进行分组和统计分析。

    • group_by_state:这是一个terms聚合,命名为group_by_state(注意,则个名称是自定义的,不是标准字段),它将结果基于age字段的术语进行分组,并为每个年龄提供计数。
      • terms:指定使用age字段进行分组并统计文档数量。
    • avg_age:这是一个度量聚合,命名为avg_age(也是自定义名称),用于计算所有匹配文档的age字段的平均值。
      • avg:指定聚合类型为平均值。
  • size:指定返回的文档数量。在这里设置为0,表示不返回任何匹配的文档,只返回聚合结果。

查询解释

  • 这个查询将返回所有address字段包含"mill"的文档,但不会返回这些文档本身,只返回基于这些文档的聚合分析结果。

聚合解释

  • group_by_state聚合将为每个不同的年龄值创建一个桶,并计算每个年龄组中有多少文档。例如,如果有多个文档的age字段是30,它们将被归为一个桶,并且这个桶的计数将是这些文档的数量。
  • avg_age聚合将计算所有匹配文档的age字段的平均值,提供一个单一数值,表示所有这些文档年龄的平均。

查询结果:

聚合结果包含在响应体中的aggregations对象中,这个对象中有我们命名的两个属性avg_agegroup_by_state,属性值包含聚合结果。
在这里插入图片描述

2,按照年龄聚合,并且请求每个年龄的平均薪资

这是一个桶聚合,先按照年龄分桶,统计每个年龄的人数,然后统计每个桶内的人的平均薪资。

注意下面的写法,最外层聚合是按照年龄分桶,嵌套子聚合是外层聚合的基础上统计桶内人的平均薪资。

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "group_by_age": {
      "terms": {
        "field": "age"
      },
      "aggs": {
        "avg_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  },
  "size": 0
}
  • query:定义了搜索的具体条件。

    • match_all:这是一个查询,它匹配所有文档。这意味着搜索结果将包括bank索引中的所有文档。
  • aggs:定义了聚合操作,用于对搜索结果进行分组和统计分析。

    • group_by_age:这是一个terms聚合,它将结果基于age字段的值进行分组。
      • terms:指定使用age字段进行分组,这将创建一个桶为每个不同的年龄值。
      • aggs:在这个terms聚合内部,定义了一个子聚合avg_balance
        • avg_balance:这是一个度量聚合,用于计算每个年龄组的账户余额(balance字段)的平均值。
          • avg:指定聚合类型为平均值,计算每个年龄桶中balance字段的平均数。
  • size:指定返回的文档数量。在这里设置为0,表示不返回任何匹配的文档,只返回聚合结果。

聚合解释

  • group_by_age聚合将为每个不同的年龄值创建一个桶,并计算每个年龄组中的文档数量。
  • 在每个年龄桶内,avg_balance子聚合将计算该年龄组内所有文档的balance字段的平均值。

这个DSL的用例是分析银行索引中不同年龄段的平均账户余额。结果将展示每个年龄组的账户平均余额,这可以用于了解不同年龄段的财务状况或进行市场分析。

标签:聚合,进阶,age,aggregations,全文检索,字段,文档,terms,avg
From: https://blog.csdn.net/epitomizelu/article/details/140884458

相关文章

  • 我的新书《Android系统多媒体进阶实战》正式发售了!!!
    我的新书要正式发售了,把链接贴在下面,感兴趣的朋友可以支持下。❶发售平台:当当,京东,抖音北航社平台,小红书,b站❷目前当当和京东已开启预售❸当当网https://u.dangdang.com/KIDHJ❹京东商城https://item.m.jd.com/product/10109083199634.html?gx=RnAoqRAjajbdh8lR5Q&gxd......
  • 面向对象进阶:多态、内部类、常用API
    目录 Java中的接口Java中的内部类 常用APIStringBuilder类Java高级面向对象编程在这篇博客文章中,我们将探索Java中的高级面向对象编程概念,包括接口、内部类和常用API。每个概念都将通过代码示例来演示它们的应用。 Java中的接口 什么是接口?接口是Java中的一种引......
  • SQL进阶技巧:Hive如何巧解和差计算的递归问题?【应用案例2】
    目录0问题描述1数据准备2问题分析3小结 0问题描述有如下数据:反应了每月的页面浏览量现需要按照如下规则计算每月的累计阅读量,具体计算规则如下:最终结果如下:1数据准备withdataas(select'2024-01'asmonth,2aspvunionallselect'2024-02'asm......
  • 2024年网络安全学习指南!详尽路线图,从零基础到黑客高手的进阶之路!_网络安全自学路线图
    零基础小白,到就业!入门到入土的网安/黑客学习路线!建议的学习顺序:一、网络安全学习普法(心里有个数,要进去坐几年!)1、了解并介绍《网络安全法》2、《全国人大常委会关于维护互联网安全的决定》3、《中华人民共和国计算机信息系统安全保护条例(2011年修正)》4、《中华人民共......
  • 程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、
    场景作为一名开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗费大量时间精力......
  • SpringBoot入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专
    场景作为一名Java开发者,SpringBoot已经成为日常开发所必须。势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承Java体系需持续学习、持续优......
  • Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享
    场景作为一名Java开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承Java体系需持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗......
  • 【架构师进阶必备】Spring - 运行时以四种方式动态注册 bean
    Spring—运行时以四种方式动态注册bean1.概述在本教程中,我们将学习“使用spring动态注册bean”或“在运行时动态将bean添加到spring-context”。在Spring应用程序中加载和删除bean时,无需在运行时重新启动应用程序即可完成此操作。如果客户端代码需要注册不......
  • Linux学习笔记8(Find命令进阶学习)
    目录通过所有者来查找1.指定所属的用户2.指定所属的组通过权限来查找1.指定精确的权限查找2.指定所有者(用户、组、其他人)至少有一个拥有此权限即可3.指定文件最低权限查找,即大于等于4.查找文件不是指定的权限(取反)5.查找所有只读的文件6.查找所有可执行文件......
  • Python连接MinIO进阶教程:文件类型指定、上传与获取预览链接
    文章目录概要1.指定文件内容类型2.获取文件的预览链接(PresignedURL)使用fput_object上传文件4.完整示例与总结概要在上一篇文章中,我们介绍了如何使用Python连接MinIO服务器,并进行了基本的文件上传和下载操作。这次,我们将深入探讨一些进阶功能,包括在上传文件时指......