【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.mzph.cn/pingmian/69158.shtml

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

相关文章

ElasticSearch 学习课程入门(二)

引子 前文已经介绍了ES的增删改查基本操作,接下来,我们学习下高级点的用法。OK,那就让我们开始吧。 一、ES高级操作 1、条件查询 (1)GET https://127.0.0.1:9200/shopping/_search?qcategory:小米 (2&…

6.PPT:魏女士-高新技术企业政策【19】

目录 NO1234​ NO567 ​ NO1234 创建“PPT.pptx”考生文件夹Word素材文档:选中对应颜色的文字→选中对应的样式单击右键按下匹配对应文字:应用所有对应颜色的文字开始→创建新的幻灯片→从大纲:考生文件夹:Word素材重置 开始→版…

【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)

理解Linux系统内进程信号的整个流程可分为: 信号产生 信号保存 信号处理 上篇文章重点讲解了 信号的产生,本文会讲解信号的保存和信号处理相关的概念和操作: 两种信号默认处理 1、信号处理之忽略 ::signal(2, SIG_IGN); // ignore: 忽略#…

【算法篇】贪心算法

目录 贪心算法 贪心算法实际应用 一,零钱找回问题 二,活动选择问题 三,分数背包问题 将数组和减半的最小操作次数 最大数 贪心算法 贪心算法,是一种在每一步选择中都采取当前状态下的最优策略,期望得到全局最优…

SSM网上球鞋竞拍系统

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 js…

基于springboot河南省旅游管理系统

基于Spring Boot的河南省旅游管理系统是一种专为河南省旅游行业设计的信息管理系统,旨在整合和管理河南省的旅游资源信息,为游客提供准确、全面的旅游攻略和服务。以下是对该系统的详细介绍: 一、系统背景与意义 河南省作为中国的中部省份&…

人工智能|本地部署|ollama+chatbox快速Windows10下部署(初级篇)

一、 前言: 其实早一个月我已经使用过deepseek,并且也在自己的机器上通过ollama部署过,但一直没有太多动力,现在感觉还是的记录一下,省的自己给忘掉了 本文只是简单记录一下ollamaopen-webuichatbox部署通过网盘分享…

ZZNUOJ(C/C++)基础练习1061——1070(详解版)

目录 1061 : 顺序输出各位数字 C语言版 C版 1062 : 最大公约数 C C 1063 : 最大公约与最小公倍 C C 1064 : 加密字符 C C 1065 : 统计数字字符的个数 C C 1066 : 字符分类统计 C C 1067 : 有问题的里程表 C C 1068 : 进制转换 C C C(容器stack…

记录一下 在Mac下用pyinstallter 打包 Django项目

安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…

使用Python和TensorFlow/Keras构建一个简单的CNN模型来识别手写数字

一个简单的图像识别项目代码示例,使用Python和TensorFlow/Keras库来训练一个基本的CNN模型,用于识别MNIST手写数字数据集,并将测试结果输出到HTML。 代码运行效果截图: 具体操作步骤: 1. 安装所需的库 首先,确保你已经安装了所需的Python库: pip install tensorflow…

2021.3.1的android studio版本就很好用

使用最新版的studio有个问题就是gradle版本也比较高,这样就容易出现之前项目不兼容问题,配置gradle可能会出现很多问题比较烦,所以干脆就用老版本的studio

控件【QT】

文章目录 控件QWidgetenabledgeometrysetGeometry qrcwindowOpacityQPixmapfonttoolTipfocusPolicystyleSheetQPushButtonRadio ButtionCheck Box显示类控件QProgressBarcalendarWidget 控件 Qt中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮,下拉框…

【小鱼闪闪】做一个物联网控制小灯的制作流程简要介绍(图文)

1、注册物联网云平台,这里选用巴法云 2.、新建主题 “ledtest” 3、 使用Arduino或Mixly软件编写单片机程序(需要引用巴法云库文件),程序中订阅“ledtest”主题,用于接收单片机发送来的数据。此处会将连接的温度传感器…

KNN算法:从思想到实现(附代码)

引言 K最近邻算法(K Nearest Neighbors, KNN)是一种简单而有效的机器学习算法,用于分类和回归问题。其核心思想基于“近朱者赤,近墨者黑”,即通过测量不同特征值之间的距离来进行分类或预测数值。本文将详细介绍KNN的…

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)

一、自适应大邻域搜索概念介绍 自适应大邻域搜索(Adaptive Large Neighborhood Search,ALNS)是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍: -自适应大领域搜索的核心思想是:破坏解、修复解、动…

TensorFlow深度学习实战(6)——回归分析详解

TensorFlow深度学习实战(6)——回归分析详解 0. 前言1. 回归分析简介2. 线性回归2.1 简单线性回归2.2 多重线性回归2.3 多元线性回归 3. 构建基于线性回归的神经网络3.1 使用 TensorFlow 进行简单线性回归3.2 使用 TensorFlow 进行多元线性回归和多重线性…

2024年12月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. …

Java 面试合集(2024版)

种自己的花,爱自己的宇宙 目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象??? 难度系数:? 2、重载与重写区别??? 难度系数:? 3、接口与抽象类的区别??? 难度系数:? 4、深拷贝与浅拷贝的理解??? 难度系数&…

Math Reference Notes: 符号函数

1. 符号函数的定义 符号函数(Sign Function) sgn ( x ) \text{sgn}(x) sgn(x) 是一个将实数 ( x ) 映射为其 符号值(即正数、负数或零)的函数。 它的定义如下: sgn ( x ) { 1 如果 x > 0 0 如果 x 0 − 1 如…

一文了解边缘计算

什么是边缘计算? 我们可以通过一个最简单的例子来理解它,它就像一个司令员,身在离炮火最近的前线,汇集现场所有的实时信息,经过分析并做出决策,及时果断而不拖延。 1.什么是边缘计算? 边缘计算…