您当前的位置: 首页 > 

wu@55555

暂无认证

  • 2浏览

    0关注

    201博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

wu@55555 发布时间:2022-06-01 14:41:58 ,浏览量:2

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之家,了解更多新鲜内容
关注
打赏
1664985904
查看更多评论
立即登录/注册

微信扫码登录

0.0591s