如何解决ElasticSearch术语汇总脚本时区转换
我真的很努力。在Painless中,我将如何更新以下内容:
"aggs": {
"total_messages_per_day_of_week": {
"terms": {
"script": {
"lang": "painless","source": "doc['date'].value.dayOfWeek"
}
},
要在获取星期几之前将doc.date中的UTC日期时间转换为语言环境(例如'America / Los_Angeles')?
基本上,我想按天数进行汇总,但是其中天数代表所需的时区天,而不是UTC天。
非常感谢!
解决方法
您可以这样操作,首先通过ZonedDateTime
将UTC日期转换为Instant.atZone()
,然后选择星期几:
Instant date = Instant.ofEpochMilli(doc['timestamp'].value);
ZonedDateTime zdt = date.atZone(ZoneId.of('America/Los_Angeles'));
return zdt.getDayOfWeek().getValue();
由于doc.date.value
实际上是JodaCompatibleZonedDateTime
(即ZonedDateTime
的代表),因此在您进行汇总时,您可以尝试以下操作:
{
...,"aggs": {
"days": {
"terms": {
"script": "doc['timestamp'].value. withZoneSameInstant(ZoneId.of('America/Los_Angeles')).getDayOfWeek().getValue()"
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。