Elasticsearch:Bucket script 聚合

2023-11-24 22:59

本文主要是介绍Elasticsearch:Bucket script 聚合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 Bucket script 聚合是一个父管道(parent pipeline)聚合,它执行一个脚本,该脚本可以对父多桶聚合中的指定指标执行每个桶的计算。 指定的指标必须是数字,并且脚本必须返回一个数值。有关 pipeline 聚合的内容,你可以阅读文章 “Elasticsearch:pipeline aggregation 介绍”。

Bucket script 聚合

用法

单独的 bucket_script 聚合看起来像这样:

{"bucket_script": {"buckets_path": {"my_var1": "the_sum",                     "my_var2": "the_value_count"},"script": "params.my_var1 / params.my_var2"}
}

这里,my_var1 是要在脚本中使用的存储桶路径的变量名称,the_sum 是要用于该变量的指标的路径。

Bucket_script 参数说明
参数名称描述强制要求默认值
script为此聚合运行的脚本。 该脚本可以是内联的、文件的或索引的。 (有关详细信息,请参阅脚本)必须
buckets_path脚本变量的映射及其到我们希望用于变量的存储桶的关联路径(有关更多详细信息,请参见 buckets_path 语法)必须
gap_policy在数据中发现差距时应用的策略(有关详细信息,请参阅处理数据中的差距)可选skip
format输出值的 DecimalFormat 模式。 如果指定,则在聚合的 value_as_string 属性中返回格式化的值可选null

在以下的展示中,我使用 Elastic Stack 8.4.3 来进行展示。

示例

为了说明问题的方便,我们来使用一个示例来进行详细说明。我将使用 Kibana 自带的 eCommerce 索引进行展示。我们的目的是:找出每天销售的 Men's Clothing 这个类别的销售额在总体销售额中的比例

在本练习中,我们使用 Kibana 自带的一个例子来进行展示:

这样我能就在 Elasticsearch 中创建了一个叫做 kibana_sample_data_ecommerce 的索引。这个一个 eCommerce 的数据。我们可以在 Discover 中进行查看:

如上所示,上面的数据展示的是从 10 月 20 号到 10 月 31 号的数据。

我们可以使用 Lens 来展示每天的文档数:

如上所示,每天都有一定数量的文档。上面的聚合相当于如下的命令:

GET kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"}}}
}

 上面的聚合返回如下的数据:

我们可以通过如下的命令来得到每天的总销售额:

GET kibana_sample_data_ecommerce/_search?filter_path=aggregations
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"},"aggs": {"total_sales": {"sum": {"field": "products.base_price"}}}}}
}

如上所示,我们求出了每天销售的总额。为了能够求出每天卖出的 Men's clothing 这个类别的总额,我们可以使用另外一个叫做 filter 的聚合: 

GET kibana_sample_data_ecommerce/_search?filter_path=aggregations
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"},"aggs": {"total_sales": {"sum": {"field": "products.base_price"}},"man's_clothing": {"filter": {"term": {"category.keyword": "Men's Clothing"}},"aggs": {"sales": {"sum": {"field": "products.base_price"}}}}}}}
}

如上所示,我们至此求出了 Men's Clothing 这个类别的每天的销售总额。

我们接下来使用 bucket script 聚合来求出每天的 Men's Clothing 这个类别的总额和当天销售总额的百分比:

GET kibana_sample_data_ecommerce/_search?filter_path=aggregations
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"},"aggs": {"total_sales": {"sum": {"field": "products.base_price"}},"man's_clothing": {"filter": {"term": {"category.keyword": "Men's Clothing"}},"aggs": {"sales": {"sum": {"field": "products.base_price"}}}},"man's_clothing_percentage": {"bucket_script": {"buckets_path": {"mans_clothing": "man's_clothing>sales","total_sales": "total_sales"},"script": "params.mans_clothing / params.total_sales * 100"}}}}}
}

在上面的 man's_clothing_percentage 聚合中,它使用了其它聚合的结果并算出新的聚合的值。这种聚合被称之为 pipeline 聚合。 特别需要指出的是 man's_clothing>sales 不是布尔比较大小的算式,而是引用聚合值的路径。

如上所示,我们可以看到每天的 Men's Clothing 的销售额的百分比。

这篇关于Elasticsearch:Bucket script 聚合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422696

相关文章

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

JavaScript错误处理避坑指南

《JavaScript错误处理避坑指南》JavaScript错误处理是编程过程中不可避免的部分,它涉及到识别、捕获和响应代码运行时可能出现的问题,本文将详细给大家介绍一下JavaScript错误处理的... 目录一、错误类型:三大“杀手”与应对策略1. 语法错误(SyntaxError)2. 运行时错误(R

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程