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

【Elasticsearch】Bucket Selector Aggregation

Elasticsearch 的Bucket Selector Aggregation是一种强大的管道聚合功能,用于根据条件过滤聚合结果中的桶(buckets)。它允许用户通过编写脚本来动态决定哪些桶应该被保留,哪些应该被过滤掉。以下是对Bucket Selector Aggregation的详细说明:

1.基本概念

Bucket Selector Aggregation 是一种父级管道聚合,这意味着它依赖于其父级聚合生成的桶。它通过执行一个脚本,根据脚本返回的布尔值来决定是否保留当前桶。如果脚本返回`true`,则保留该桶;如果返回`false`,则过滤掉该桶。

2.主要用途

• 数据筛选:在聚合结果中根据特定条件筛选出符合要求的桶。例如,只保留销售额超过某个阈值的月份。

• 动态过滤:根据动态计算的值(如平均值、总和等)进行过滤。

• 数据清洗:在分析数据时,排除不符合业务逻辑的数据桶。

3.关键组件

3.1buckets_path

`buckets_path`是一个映射,用于定义脚本中变量与父级聚合生成的桶路径之间的关系。它告诉 Elasticsearch 如何从父级聚合中提取数据供脚本使用。

• 格式:

```json

  "buckets_path": {

    "variable_name": "path_to_metric"

  }

  ```

• 示例:

```json

  "buckets_path": {

    "totalSales": "total_sales"

  }

  ```

在这个例子中,`totalSales`是脚本中使用的变量名,`total_sales`是父级聚合中某个指标的路径。

3.2script

`script`是一个脚本,用于定义桶是否应该被保留的逻辑。脚本可以是内联脚本、文件脚本或索引脚本。

• 脚本语言:支持多种脚本语言,如`painless`和`expression`。

• 返回值:脚本必须返回一个布尔值。如果脚本语言是`expression`,则允许返回数值,`0.0`被视为`false`,其他值被视为`true`。

• 示例:

```json

  "script": "params.totalSales > 200"

  ```

这个脚本表示只有当`totalSales`大于 200 时,桶才会被保留。

3.3gap_policy

`gap_policy`是一个可选参数,用于定义在数据中存在缺口时的处理策略。缺口是指某些桶中缺少某些指标值。

• 默认值:`skip`,表示跳过缺失数据的桶。

• 其他选项:

• `insert_zeros`:在缺失数据的地方插入零值。

• 示例:

```json

    "gap_policy": "insert_zeros"

    ```

4.执行顺序

Bucket Selector Aggregation 是在所有其他兄弟聚合执行之后才执行的。这意味着它不会节省聚合的执行时间,但可以在返回结果时过滤掉不符合条件的桶。

5.示例

以下是一个完整的示例,展示如何使用 Bucket Selector Aggregation 来筛选每月销售额超过 200 的月份。

5.1查询示例

```json

POST /sales/_search

{

  "size": 0,

  "aggs": {

    "sales_per_month": {

      "date_histogram": {

        "field": "date",

        "calendar_interval": "month"

      },

      "aggs": {

        "total_sales": {

          "sum": {

            "field": "price"

          }

        },

        "sales_bucket_filter": {

          "bucket_selector": {

            "buckets_path": {

              "totalSales": "total_sales"

            },

            "script": "params.totalSales > 200"

          }

        }

      }

    }

  }

}

```

5.2响应示例

```json

{

   "took": 11,

   "timed_out": false,

   "_shards": ...,

   "hits": ...,

   "aggregations": {

      "sales_per_month": {

         "buckets": [

            {

               "key_as_string": "2015/01/01 00:00:00",

               "key": 1420070400000,

               "doc_count": 3,

               "total_sales": {

                   "value": 550.0

               }

            },

            {

               "key_as_string": "2015/03/01 00:00:00",

               "key": 1425168000000,

               "doc_count": 2,

               "total_sales": {

                   "value": 375.0

               }

            }

         ]

      }

   }

}

```

在这个响应中,`2015/02/01`的桶被移除了,因为其总销售额低于 200。

6.注意事项

• 性能影响:由于 Bucket Selector Aggregation 是在所有其他聚合执行之后才运行的,因此它不会减少聚合的执行时间。

• 脚本安全:使用脚本时需要注意安全性和性能问题,避免复杂的脚本逻辑导致性能下降。

• 数据完整性:在使用`gap_policy`时,需要根据业务需求选择合适的策略,以确保数据的完整性。

7.总结

Bucket Selector Aggregation 是 Elasticsearch 中一个非常有用的工具,它允许用户根据动态条件过滤聚合结果中的桶。通过合理使用`buckets_path`、`script`和`gap_policy`,可以实现复杂的数据筛选和清洗逻辑,从而更好地满足数据分析需求。


http://www.kler.cn/a/542987.html

相关文章:

  • 缓存技术介绍
  • C# ASP.NET的发展历程
  • DevOps的个人学习
  • ThinkPHP8视图赋值与渲染
  • http 与 https 的区别?
  • MySQL 索引失效案例:字符集不匹配的隐蔽影响
  • 微信小程序的behaviors和vuex功能对比
  • 如何在Java中使用JUnit进行单元测试
  • 19.1.2 DML
  • Ubuntu22.04 配置deepseek知识库
  • 【Linux】修改语言编码
  • 通过命令行运行py文件与通过ide运行py文件,对文件中模块的引用方式的影响
  • Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
  • C# ASP.NET核心特性介绍
  • Java基础知识(七) -- 集合
  • 初学springboot注解
  • 【计算机网络】TCP/IP 网络模型有哪几层?
  • UI-设计规范大小总结
  • 4G/5G路由器链路检查作业指导
  • 14.1 AutoGPT 项目深度解析:为什么它能掀起自主智能体开发革命?
  • 安防机器人电源解决方案
  • 网络在线考试|基于vue的网络在线考试系统的设计与实现(源码+数据库+文档)
  • Python自动化办公之批量重命名
  • MySQL 动态分区管理:自动化与优化实践
  • PortSwigger——WebSockets vulnerabilities
  • 【GeeRPC】Day5:支持 HTTP 协议