【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&…

中国通信企业协会 通信网络安全服务能力评定 风险评估二级要求准则

通信网络安全服务能力评定要求是对通信网络安全服务单位的资格状况、经济实力、技术能力、服务队伍、服务过程能力等方面的具体衡量和评价。中国通信企业协会通信网络安全服务能力评定风险评估二级应达到风险评估服务一级能力要求的所有条款,并在以下方面增强或增加…

php反序列化含CTF实战

php反序列化 声明:本人只是在学习反序列化 因此这篇文章大量参考了https://blog.csdn.net/Hardworking666/article/details/122373938 这位的博客 感谢他的详细文章让我可以详细学习反序列化 大家想看更详细的可以直接参考他的文章!!! 什么是序列化和反序列化 序…

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

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

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

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

学习日记250205

一.论文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 二、计划: 理一下微调相关的文章 三. )——( 明天认真学习了,不能再打这么久的星露谷了!!&#xff0…

【算法篇】贪心算法

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

SSM网上球鞋竞拍系统

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

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

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

探索 paraphrase-MiniLM-L6-v2 模型在自然语言处理中的应用

在自然语言处理(NLP)领域,将文本数据转换为机器学习模型可以处理的格式是至关重要的。近年来,sentence-transformers 库因其在文本嵌入方面的卓越表现而受到广泛关注。本文将深入探讨 paraphrase-MiniLM-L6-v2 模型,这…

人工智能|本地部署|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…

OSCP:发送钓鱼电子邮件执行客户端攻击

概述 在渗透测试领域,钓鱼攻击是一种有效的客户端攻击手段,尤其在目标用户缺乏安全意识或系统存在未修复漏洞时,成功率较高。针对Windows平台,滥用Windows库文件(.Library-ms)是一种技术性较强但易于实施的…

记录一下 在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…

【学Rust写CAD】4 相对坐标系详解与实现要素概览

相对坐标系(Relative Coordinate System, RCS)是一个强大且灵活的工具,尤其在绘图、三维建模等领域中发挥着重要作用。以下是对相对坐标系的详细解析,包括其定义、应用、特性、与绝对坐标的区别、在CAD中的应用以及实现方式。 一…

个人的胡思乱想

转眼就是2025年,时间过的飞快,2024这一年,基本到处出差,因为换了新的方向,投身到半导体智能制造行业,依然是以技术为进入行业的切入点,不得不说,软件编程是万金油,干啥都…

鲸鱼算法 matlab pso

算法原理 鲸鱼优化算法的核心思想是通过模拟座头鲸的捕食过程来进行搜索和优化。座头鲸在捕猎时会围绕猎物游动并产生气泡网,迫使猎物聚集。这一行为被用来设计搜索策略,使算法能够有效地找到全局最优解。 算法步骤 ‌初始化‌:随机生成一…

2021.3.1的android studio版本就很好用

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

控件【QT】

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