【Elasticsearch】date range聚合

 好的,继续之前的示例:

 

 

```json

        ]

      }

    }

  }

}

```

 

 

 

4.3 自定义键(`key`)

通过为每个范围指定一个唯一的键(`key`),可以在结果中更方便地引用每个范围。这在使用`keyed`参数将结果以键值对形式返回时尤其有用。

 

 

```json

POST /sales/_search?size=0

{

  "aggs": {

    "sales_range": {

      "date_range": {

        "field": "date",

        "ranges": [

          { "to": "2024-01-01", "key": "before_2024" },

          { "from": "2024-01-01", "key": "after_2024" }

        ],

        "keyed": true

      }

    }

  }

}

```

 

 

响应示例:

 

 

```json

{

  "aggregations": {

    "sales_range": {

      "buckets": {

        "before_2024": {

          "to": 1640995200000,

          "to_as_string": "2024-01-01",

          "doc_count": 10

        },

        "after_2024": {

          "from": 1640995200000,

          "from_as_string": "2024-01-01",

          "doc_count": 20

        }

      }

    }

  }

}

```

 

 

 

5.常见用例

 

 

5.1 按时间段分析数据

`date_range`聚合非常适合按时间段分析数据,例如按月、按季度或按年分析销售数据、用户活动等。

 

 

示例:按季度分析销售数据

假设你想按季度分析2024年的销售数据:

 

 

```json

POST /sales/_search?size=0

{

  "aggs": {

    "quarterly_sales": {

      "date_range": {

        "field": "date",

        "format": "yyyy-MM-dd",

        "ranges": [

          { "from": "2024-01-01", "to": "2024-04-01", "key": "Q1" },

          { "from": "2024-04-01", "to": "2024-07-01", "key": "Q2" },

          { "from": "2024-07-01", "to": "2024-10-01", "key": "Q3" },

          { "from": "2024-10-01", "to": "2025-01-01", "key": "Q4" }

        ]

      }

    }

  }

}

```

 

 

响应示例:

 

 

```json

{

  "aggregations": {

    "quarterly_sales": {

      "buckets": [

        {

          "key": "Q1",

          "from": 1640995200000,

          "from_as_string": "2024-01-01",

          "to": 1651382400000,

          "to_as_string": "2024-04-01",

          "doc_count": 30

        },

        {

          "key": "Q2",

          "from": 1651382400000,

          "from_as_string": "2024-04-01",

          "to": 1656662400000,

          "to_as_string": "2024-07-01",

          "doc_count": 40

        },

        {

          "key": "Q3",

          "from": 1656662400000,

          "from_as_string": "2024-07-01",

          "to": 1664592000000,

          "to_as_string": "2024-10-01",

          "doc_count": 50

        },

        {

          "key": "Q4",

          "from": 1664592000000,

          "from_as_string": "2024-10-01",

          "to": 1672531200000,

          "to_as_string": "2025-01-01",

          "doc_count": 60

        }

      ]

    }

  }

}

```

 

 

 

5.2 处理时区差异

在处理跨时区的数据时,`time_zone`参数非常有用。例如,如果你的数据存储在 UTC,但需要按用户所在时区进行分析,可以使用`time_zone`参数。

 

 

示例:按美国东部时间(EST)分析日志数据

假设你有一个日志索引`logs`,其中的`timestamp`字段记录了日志的时间戳(以 UTC 存储)。你希望按美国东部时间(EST,UTC-5)分析每天的日志数量:

 

 

```json

POST /logs/_search?size=0

{

  "aggs": {

    "daily_logs": {

      "date_histogram": {

        "field": "timestamp",

        "calendar_interval": "1d",

        "time_zone": "America/New_York"

      }

    }

  }

}

```

 

 

 

5.3 动态日期范围

使用日期数学表达式可以动态定义日期范围。例如,你可以根据当前时间动态生成过去几个月的范围。

 

 

示例:动态生成过去12个月的范围

假设你想分析过去12个月的销售数据:

 

 

```json

POST /sales/_search?size=0

{

  "aggs": {

    "monthly_sales": {

      "date_range": {

        "field": "date",

        "format": "yyyy-MM-dd",

        "ranges": [

          { "from": "now-12M/M", "to": "now-11M/M", "key": "12_months_ago" },

          { "from": "now-11M/M", "to": "now-10M/M", "key": "11_months_ago" },

          { "from": "now-10M/M", "to": "now-9M/M", "key": "10_months_ago" },

          { "from": "now-9M/M", "to": "now-8M/M", "key": "9_months_ago" },

          { "from": "now-8M/M", "to": "now-7M/M", "key": "8_months_ago" },

          { "from": "now-7M/M", "to": "now-6M/M", "key": "7_months_ago" },

          { "from": "now-6M/M", "to": "now-5M/M", "key": "6_months_ago" },

          { "from": "now-5M/M", "to": "now-4M/M", "key": "5_months_ago" },

          { "from": "now-4M/M", "to": "now-3M/M", "key": "4_months_ago" },

          { "from": "now-3M/M", "to": "now-2M/M", "key": "3_months_ago" },

          { "from": "now-2M/M", "to": "now-1M/M", "key": "2_months_ago" },

          { "from": "now-1M/M", "to": "now/M", "key": "1_month_ago" }

        ]

      }

    }

  }

}

```

 

 

 

6.注意事项

 

 

6.1 日期格式

确保`from`和`to`的日期格式与`format`参数一致。如果未指定`format`,Elasticsearch 将使用默认的日期格式。

 

 

6.2 时区转换

在使用`time_zone`参数时,Elasticsearch 会将所有日期字段从 UTC 转换为指定的时区。这可能会影响日期的四舍五入行为。

 

 

6.3 性能优化

虽然`date_range`聚合在 Elasticsearch 中是高效的,但在处理大量数据时,仍需注意性能影响。可以通过以下方式优化性能:

 

• 索引优化:确保日期字段已正确索引。

 

• 查询优化:尽量减少返回的字段数量,使用`size=0`来避免返回文档内容。

 

• 缓存:对于频繁查询的范围,可以考虑使用缓存。

 

 

7.总结

`date_range`聚合是 Elasticsearch 中一个非常强大的工具,用于将日期数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12985.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【R语言】获取数据

R语言自带2种数据存储格式:*.RData和*.rds。 这两者的区别是:前者既可以存储数据,也可以存储当前工作空间中的所有变量,属于非标准化存储;后者仅用于存储单个R对象,且存储时可以创建标准化档案&#xff0c…

[leetcode]双指针算法的使用

零.参考文章 双指针技术在数组和链表问题中的应用解析-CSDN博客 一.使用情况 双指针即是在有序数组的情况下,我们通过两个指针在遍历的过程中进行标记,对满足条件的进行处理,直至遍历完整个数组。 二.举个例子 2.1小人过河问题&#xff…

自指学习:AGI的元认知突破

文章目录 引言:从模式识别到认知革命一、自指学习的理论框架1.1 自指系统的数学定义1.2 认知架构的三重反射1.3 与传统元学习的本质区别二、元认知突破的技术路径2.1 自指神经网络架构2.2 认知效能评价体系2.3 知识表示的革命三、实现突破的关键挑战3.1 认知闭环的稳定性3.2 计…

C++ 入门速通-第5章【黑马】

内容来源于:黑马 集成开发环境:CLion 先前学习完了C第1章的内容: C 入门速通-第1章【黑马】-CSDN博客 C 入门速通-第2章【黑马】-CSDN博客 C 入门速通-第3章【黑马】-CSDN博客 C 入门速通-第4章【黑马】-CSDN博客 下面继续学习第5章&…

hot100(7)

61.31. 下一个排列 - 力扣(LeetCode) 数组问题,下一个更大的排列 题解:31. 下一个排列题解 - 力扣(LeetCode) (1)从后向前找到一个相邻的升序对(i,j),此时…

图像分类与目标检测算法

在计算机视觉领域,图像分类与目标检测是两项至关重要的技术。它们通过对图像进行深入解析和理解,为各种应用场景提供了强大的支持。本文将详细介绍这两项技术的算法原理、技术进展以及当前的落地应用。 一、图像分类算法 图像分类是指将输入的图像划分为…

记录一次-Rancher通过UI-Create Custom- RKE2的BUG

一、下游集群 当你的下游集群使用Mysql外部数据库时,会报错: **他会检查ETCD。 但因为用的是Mysql外部数据库,这个就太奇怪了,而且这个检测不过,集群是咩办法被管理的。 二、如果不选择etcd,就选择控制面。 在rke2-…

SpringUI Web高端动态交互元件库

Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合,旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍: 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…

MySQL表的CURD

目录 一、Create 1.1单行数据全列插入 1.2多行数据指定列插入 1.3插入否则更新 1.4替换 2.Retrieve 2.1 select列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4为查询结果指定别名 2.1.5结果去重 2.2where条件 2.3结果排序 2.4筛选分页结果 三…

文字加持:让 OpenCV 轻松在图像中插上文字

前言 在很多图像处理任务中,我们不仅需要提取图像信息,还希望在图像上加上一些文字,或是标注,或是动态展示。正如在一幅画上添加一个标语,或者在一个视频上加上动态字幕,cv2.putText 就是这个“文字魔术师”,它能让我们的图像从“沉默寡言”变得生动有趣。 今天,我们…

(9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,

(11) 查看断点 info b: # info b举例: (12)删除断点 delete 2 或者删除所有断点: # 1. 删除指定的断点 delete 3 # 2. 删除所有断点 delete 回车,之后输入 y 确认删除所有断点 举…

游戏引擎学习第88天

仓库:https://gitee.com/mrxiao_com/2d_game_2 调查碰撞检测器中的可能错误 在今天的目标是解决一个可能存在的碰撞检测器中的错误。之前有人提到在检测器中可能有一个拼写错误,具体来说是在测试某个变量时,由于引入了一个新的变量而没有正确地使用它&…

【2025】camunda API接口介绍以及REST接口使用(3)

前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用,以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 🍅【2024】Camunda常用功能基本详细介绍和使用-下(1&…

Java高频面试之SE-17

hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 Java缓冲区溢出,如何解决? 在 Java 中,缓冲区溢出 (Buffer Overflow) 虽然不是像 C/C 中那样直接可见…

用 Python 绘制爱心形状的简单教程

1. 引言 在本教程中,我们将学习如何使用 Python 和 Matplotlib 库来绘制一个简单的爱心形状。这是一个有趣且简单的项目,适合初学者练习图形绘制和数据可视化。 2. 环境准备 首先,确保您的系统上安装了 Python 和 Matplotlib 库。如果还未…

107,【7】buuctf web [CISCN2019 华北赛区 Day2 Web1]Hack World

这次先不进入靶场 看到红框里面的话就想先看看uuid是啥 定义与概念 UUID 是 Universally Unique Identifier 的缩写,即通用唯一识别码。它是一种由数字和字母组成的 128 位标识符,在理论上可以保证在全球范围内的唯一性。UUID 的设计目的是让分布式系…

Linux之安装MySQL

1、查看系统当前版本是多少位的 getconf LONG_BIT2.去官网下载对应的MYSQL安装包 这里下载的是8版本的,位数对应之前的64位 官网地址:https://downloads.mysql.com/archives/community/ 3.上传压缩包 4.到对应目录下解压 tar -xvf mysql-8.0.26-lin…

【NLP 20、Encoding编码 和 Embedding嵌入】

目录 一、核心定义与区别 二、常见Encoding编码 (1) 独热编码(One-Hot Encoding) (2) 位置编码(Positional Encoding) (3) 标签编码(Label Encoding) (4) 注意事项 三、常见Embedding词嵌入 (1) 基础词嵌入…

【ArcGIS Pro 简介1】

ArcGIS Pro 是由 Esri (Environmental Systems Research Institute)公司开发的下一代桌面地理信息系统(GIS)软件,是传统 ArcMap 的现代化替代产品。它结合了强大的空间分析能力、直观的用户界面和先进的三维可视化技术…

初学 Xvisor 之理解并跑通 Demo

官网:https://www.xhypervisor.org/ quick-start 文档:https://github.com/xvisor/xvisor/blob/master/docs/riscv/riscv64-qemu.txt 零、Xvisor 介绍 下面这部分是 Xvisor 官方的介绍 Xvisor 是一款开源的 Type-1 虚拟机管理程序,旨在提供一…