Elastic实战:script painless中求两日期之差

简介: 在不少项目统计需求中,我们需要计算周期或者持续时间,这就需要我们计算两个日期之差。所以今天我们就来探讨在es的script脚本中使用painless语法如何计算量日期之差

0. 引言

在不少项目统计需求中,我们需要计算周期或者持续时间,这就需要我们计算两个日期之差。所以今天我们就来探讨在es的script脚本中使用painless语法如何计算量日期之差

1. 解决

本次演示环境基于elasticsearch7.13.0

首先我们来看直接相减会发生什么
在这里插入图片描述
结果:
我们可以看到报错了,原因是JodaCompatibleZonedDateTime类型的数据不能应用减号操作符
这里的JodaCompatibleZonedDateTime类型就是es中的日期类型
在这里插入图片描述
那不能用减号,我们该怎么计算呢?

首先要知道的是,我们是在painless语法中进行计算的,painless是类java的语法,回想一下java中是如何计算两日期之差的呢?

是不是要先把两个日期转换为毫秒数、秒数或者分钟数,这时这些数值就可以通过减法来计算差值了

painless也一样,但是我们怎么知道painless中的日期类型怎么转换为秒数呢?这就要借助painless官方文档

找到Shared API,并在其中搜索JodaCompatibleZonedDateTime,我们就可以找到关于该类的相关方法介绍了
在这里插入图片描述
点击进入JodaCompatibleZonedDateTime,会发现里面提供了一系列的方法
在这里插入图片描述

因为我这里的需求是求两日期相差的分钟数,我们利用getMillis()来将日期转换为毫秒数,然后计算毫秒数之差,将结果除以1000*60=60000就可以转换为分钟了

示例如下
在这里插入图片描述

查询结果
在这里插入图片描述

关注公众号 Elasticsearch之家,了解更多新鲜内容

目录
相关文章
|
定位技术
【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
166 0
|
1月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
3月前
|
算法 搜索推荐 程序员
第四十七练 请以递归方式实现计算整数列表的最大值
第四十七练 请以递归方式实现计算整数列表的最大值
33 2
|
3月前
|
Java Go C++
Golang每日一练(leetDay0102) 数据流中位数、删除无效括号、累加数
Golang每日一练(leetDay0102) 数据流中位数、删除无效括号、累加数
43 0
Golang每日一练(leetDay0102) 数据流中位数、删除无效括号、累加数
|
3月前
【每日一题Day277】LC2569更新数组后处理求和查询 | 线段树
【每日一题Day277】LC2569更新数组后处理求和查询 | 线段树
21 0
|
9月前
|
算法
代码随想录算法训练营第二十六天 | LeetCode 39. 组合总和、40. 组合总和 II、131. 分割回文串
代码随想录算法训练营第二十六天 | LeetCode 39. 组合总和、40. 组合总和 II、131. 分割回文串
36 0
|
12月前
|
监控 算法
算法训练Day37|738.单调递增的数字 ● 968.监控二叉树
算法训练Day37|738.单调递增的数字 ● 968.监控二叉树
006.AcWing 789. 数的范围 (001)以及二分法的模板讲解
应用场景 只要数组满足一条件就可将其划分,就可以用二分
74 0
006.AcWing 789. 数的范围 (001)以及二分法的模板讲解
|
算法 Java 网络架构
代码随想录训练营day27| 39. 组合总和 40.组合总和II 131.分割回文串
代码随想录训练营day27| 39. 组合总和 40.组合总和II 131.分割回文串
(二分模板边界移动写法解析)789. 数的范围
(二分模板边界移动写法解析)789. 数的范围
49 0