如何解决从ElasticSearch查询的日期字段中提取日期yyyyMMdd
我的索引有一个日期字段,格式为2020-01-04T05:00:06.870000Z
。在ES查询响应中,我需要yyyyMMdd
形式的日期,所以20200104
。我尝试使用脚本查询并分别提取了日期,月份和年份。我如何在_source
中将它们串联起来,得到number
形式的yyyyMMdd
?
样本数据:
"_source": {
"updated": "2020-01-04T05:00:06.870000Z"
}
"_source": {
"updated": "2020-01-04T09:00:08.870000Z"
}
"_source": {
"updated": "2019-12-04T01:00:06.870000Z"
}
}
查询:
"sort" : [
{
"_script": {
"type": "number","script": {
"lang": "painless","source": "doc['updated'].value.getYear()"
//similarly use getMonthOfYear() and getDayOfMonth(). How to concatenate and convert to number ?
},"order": "desc"
}
}
]
解决方法
您可以使用String.format
正确填写数字,然后在结果上Integer.parseInt
。
或者,您可以执行以下操作:
GET dates/_search
{
"sort": [
{
"_script": {
"type": "number","script": {
"lang": "painless","source": """
Integer.parseInt(
DateTimeFormatter
.ofPattern("yyyyMMdd")
.withZone(ZoneOffset.UTC)
.format(Instant.ofEpochMilli(
doc['updated'].value.millis)
));
"""
},"order": "desc"
}
}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。