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之家,了解更多新鲜内容

目录
相关文章
|
4月前
|
存储 Java
Algorithms_入门基础_如何使用最高效的方式来判断一个数是否是2的N次方
Algorithms_入门基础_如何使用最高效的方式来判断一个数是否是2的N次方
38 0
|
3月前
|
C语言
火山中文编程 -- 计算1-100的累加和
火山中文编程 -- 计算1-100的累加和
16 0
|
9月前
|
前端开发
前端学习笔记202306学习笔记第三十八天-Es6-数组得结构赋值
前端学习笔记202306学习笔记第三十八天-Es6-数组得结构赋值3
40 0
|
11月前
|
分布式计算 Hadoop Java
【Big Data】Hadoop--MapReduce经典题型实战(单词统计+成绩排序+文档倒插序列)
🍊本文使用了3个经典案例进行MapReduce实战🍊参考官方源码,代码风格较优雅🍊解析详细。
158 0
|
前端开发
#yyds干货盘点 【React工作记录十七】根据数组code值返回value值
#yyds干货盘点 【React工作记录十七】根据数组code值返回value值
58 0
【每日一题Day68】LC1759 统计同构字符串的数目 | 数学
思路:统计以每个字符为末尾的同构子字符串的最长长度j ,那么根据排列组合原理,以其为末尾的同构子字符串的数目为j个,累加可得最终结果
62 0
|
Java
java学习第五天笔记-循环高级和数组99-求和并统计个数
java学习第五天笔记-循环高级和数组99-求和并统计个数
55 0
java学习第五天笔记-循环高级和数组99-求和并统计个数
|
Java
java学习第四天笔记-循环高级和数组96-统计被3整除的数
java学习第四天笔记-循环高级和数组96-统计被3整除的数
60 0
java学习第四天笔记-循环高级和数组96-统计被3整除的数
|
Java
java学习第四天笔记-循环高级和数组97-统计被3整除的数
java学习第四天笔记-循环高级和数组97-统计被3整除的数
43 0
java学习第四天笔记-循环高级和数组97-统计被3整除的数