elasticsearch术语聚合脚本时区转换

wr98u20j  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(445)

我真的很挣扎。在painless中,我将如何更新以下内容:

"aggs": {
    "total_messages_per_day_of_week": {
      "terms": {
        "script": {
          "lang": "painless",
          "source": "doc['date'].value.dayOfWeek"
        }
      },

在获取星期几之前,是否将doc.date中的utc日期时间转换为区域设置(例如“america/losïangeles”?
基本上我想按天数进行聚合,但其中day number表示所需的时区日,而不是utc日。
非常感谢!

hc2pp10m

hc2pp10m1#

您可以这样做,首先将utc日期转换为 ZonedDateTime 通过 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()"
      }
    }
  }
}

相关问题