当前位置: 首页 > article >正文

大数据-177 Elasticsearch Query DSL - 聚合分析 指标聚合 桶聚合

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(正在更新…)

章节内容

上节我们完成了如下的内容:

  • Filter DSL
  • 查询排序
  • 结果高亮
  • 批量操作

在这里插入图片描述

聚合介绍

Elasticsearch 的聚合分析是一种强大的功能,允许用户在查询数据的同时对其进行统计分析、分组计算和排序,类似于 SQL 中的 GROUP BY 和 COUNT() 等操作。聚合分析包括两个主要类别:指标聚合和桶聚合。在聚合的基础上,你还可以进行嵌套聚合,将多个聚合组合在一起,从而构建复杂的分析查询。

聚合分析是数据库中的重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某个字段(或计算表达式的结果)的最大值、最小值、计算和、平均值等。Elasticsearch作为搜索引擎兼数据库,同样提供了强大的聚合分析能力。
对一个数据集求最大、最小、和、平均值等指标的聚合,在ES中称为指标聚合metric,而关系型数据库中除了有桶聚合函数外,还可以对查询出的数据进行分组GROUP BY,再在组上进行指标聚合,在ES中GROUP BY称为分桶,桶聚合Bucketing
Elasticsearch聚合分析语法,在查询请求体中aggregations节点,按如下语法定义聚合分析:

"aggregations" : {
  "<aggregation_name>" : { <!--聚合的名字 -->
    "<aggregation_type>" : { <!--聚合的类型 -->
      <aggregation_body> <!--聚合体:对哪些字段进行聚合 -->
    }
    [,"meta" : { [<meta_data_body>] } ]? <!---->
    [,"aggregations" : { [<sub_aggregation>]+ } ]? <!--在聚合里面在定义子聚合 -->
  }
}

说明:aggregatations 也可以简写做:aggs

指标聚合

max min sum avg

指标聚合 (Metrics Aggregations)
指标聚合的主要功能是计算某个字段的数值统计结果。常见的指标聚合包括求和、平均值、最大值、最小值、计数等。它们通常用于返回单个数值结果。

常用的指标聚合包括:

  • avg:计算数值字段的平均值。
  • sum:计算数值字段的总和。
  • min:返回数值字段的最小值。
  • max:返回数值字段的最大值。
  • value_count:计算某个字段的值的数量。
  • stats:返回字段的统计信息,包括最小值、最大值、平均值、总和和数量。
  • extended_stats:比 stats 聚合提供更详细的统计信息,如标准差和方差。

查询最贵的

# price的最大值 
POST /book/_search
{
  "size": 0,
  "aggs": {
    "max_price": {
      "max": {
        "field": "price"
      }
    }
  }
}

执行结果如下图所示:
在这里插入图片描述

price大于100的

# 使用 _count 计算数量
POST /book/_count
{
  "query": {
    "range": {
      "price" : {
        "gt":100
      }
    }
  }
}

执行结果如下:
在这里插入图片描述

统计字段有值

# 通过聚合的方式 统计 price 有值的
POST /book/_search
{
  "size": 0,
  "aggs": {
    "book_nums": {
      "value_count": {
        "field": "price"
      }
    }
  }
}

执行结果如下图所示:
在这里插入图片描述

去重计数

# agg 聚合 去重数量
POST /book/_search?size=0
{
  "aggs": {
    "price_count": {
      "cardinality": {
        "field": "price"
      }
    }
  }
}

执行的结果如下图所示:
在这里插入图片描述

统计计数

stats 可以统计好几个值:

  • max
  • min
  • count
  • avg
  • sum
# stats
POST /book/_search?size=0
{
  "aggs": {
    "price_stats": {
      "stats": {
        "field": "price"
      }
    }
  }
}

运行结果如下图所示:
在这里插入图片描述

扩展统计

Extended Stats,高级统计,比stats多4个统计结果:

  • 平方和
  • 方差
  • 标准差
  • 平均值加/减两个标准差的区间
# extended stats
POST /book/_search?size=0
{
  "aggs": {
    "price_stats": {
      "extended_stats": {
        "field": "price"
      }
    }
  }
}

占比百分位

Percentiles 占比百分位对应的值统计

# 占比百分位
POST /book/_search?size=0
{
  "aggs": {
    "price_percents": {
      "percentiles": {
        "field": "price"
      }
    }
  }
}

执行结果如下图所示:
在这里插入图片描述

当然,我们也可以指定分位值:

# 指定分位值
POST /book/_search?size=0
{
  "aggs": {
    "price_percents": {
      "percentiles": {
        "field": "price",
        "percents" : [75, 99, 99.9]
      }
    }
  }
}

运行结果如下图:
在这里插入图片描述

统计值小于等于指定值的文档占比

统计price小于100和200的文档的占比

POST /book/_search?size=0
{
  "aggs": {
    "gge_perc_rank": {
      "percentile_ranks": {
        "field": "price",
        "values": [
          100,200
        ]
      }
    }
  }
}

运行结果如下图所示:
在这里插入图片描述

桶聚合

Bucket Aggregations,桶聚合。
它执行的是对文档分组的操作(与SQL中的GROUP BY类似),把满足相关特性的文档分到一个桶里,即桶分,输出结果往往是一个包含多个文档的桶(一个桶就是一个GROUP)

  • bucket 一个数据分组
  • metric 对一个数据分组执行的统计

桶聚合的目的是根据某些条件对文档进行分组,每个组称为一个“桶”。每个桶包含符合特定条件的文档集合,可以对每个桶进一步执行其他聚合分析(如指标聚合或嵌套的桶聚合)。

常见的桶聚合包括:

  • terms:按某个字段的不同值进行分组(类似 SQL 的 GROUP BY)。
  • range:根据数值范围对字段进行分组。
  • date_histogram:基于时间字段按固定时间间隔分组。
  • histogram:基于数值字段按固定间隔分组。
  • filter:根据查询条件过滤文档。
  • filters:根据多个查询条件将文档分为多个不同的桶。
  • geo_distance:基于地理位置和距离的范围来分组。
POST /book/_search
{
  "size": 0,
  "aggs": {
    "group_by_price": {
      "range": {
        "field": "price",
        "ranges": [
          {
            "from": 0,
            "to": 200
          },
          {
            "from": 200,
            "to": 400
          },
          {
            "from": 400,
            "to": 1000
          }
        ]
      },
      "aggs": {
        "average_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

执行的结果如下图所示:
在这里插入图片描述

我们也可以实现having的效果:

POST /book/_search
{
  "size": 0,
  "aggs": {
    "group_by_price": {
      "range": {
        "field": "price",
        "ranges": [
          {
            "from": 0,
            "to": 200
          },
          {
            "from": 200,
            "to": 400
          },
          {
            "from": 400,
            "to": 1000
          }
        ]
      },
      "aggs": {
        "average_price": {
          "avg": {
            "field": "price"
          }
        },
        "having": {
          "bucket_selector": {
            "buckets_path": {
              "avg_price": "average_price"
            },
            "script": {
              "source": "params.avg_price >= 200 "
            }
          }
        }
      }
    }
  }
}

执行结果如下图所示:
在这里插入图片描述


http://www.kler.cn/news/355912.html

相关文章:

  • 华为杯”第十三届中国研究生数学建模竞赛-E题:基于多目标规划和智能优化算法的粮食最低收购价政策研究(中)
  • 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键
  • 16.数组、指针、结构体与函数
  • 【github】git基础用法 git flow工作模式 常用命令
  • 解决React中的Hooks闭包陷阱
  • Linux历史
  • 基于SSM公廉租房维保系统的设计
  • 【vue】指令补充+样式绑定+计算属性+侦听器
  • Vite+Vue 3+TS环境搭建
  • OpenCV高级图形用户界面(8)在指定的窗口中显示一幅图像函数imshow()的使用
  • 【Linux线程】Linux线程编程基础:概念、创建与管理
  • MicroPython rp2-LVGL 固件编译记录
  • EF Core 中避免 SQL 注入的三种写法
  • 前端SSR框架(Next、Nuxt)利用宝塔面板部署
  • 文生图模型
  • 【Windows】DevOps PowerShell实现读取ini文件 生成登陆凭证 发送文件到远程服务器 远程服务器执行指令 实现fabric1的基础功能
  • 【论文阅读】Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting
  • Flutter 与 React Native - 详细深入对比分析(2024 年)
  • 六万字77道Spring面试题总结(2024版)
  • WPF基础权限系统