elasticsearch - 在 Elasticsearch 中,如何将时区应用于脚本化日期操作?

标签 elasticsearch timezone elasticsearch-painless

通过下面的聚合并使用 ES5,我想根据给定时区获取 dayOfWeek 和 hourOfDay(作为标识符从 TZ 数据库提供)。

如何编辑 "doc['created'].date.dayOfWeek' 以调整偏移量?

    aggs: {
      dayOfWeek: {
        terms: {
          script: {
            inline: "doc['created'].date.dayOfWeek",
            lang: 'painless',
          },
        },
        aggs: {
          hourOfDay: {
            terms: {
              script: {
                inline: "doc['created'].date.hourOfDay",
                lang: 'painless',
              },
            },
          },
        },
      },
    },

最佳答案

使用无痛找到解决方案。因为他们正在将 elasticsearch 从 Joda 迁移到原生的 java.time,所以对 Joda 的支持在 painless 中不是很好。

{
  "size": 0,
  "aggregations": {
    "dayOfWeek": {
      "terms": {
        "script": {
          "inline": "Instant.ofEpochMilli(doc.created.date.millis).atZone(ZoneId.of(params.tz)).dayOfWeek",
          "params": {
            "tz": "Europe/London"
          }
        }
      },
      "aggs": {
        "hourOfDay": {
          "terms": {
            "script": {
               "inline": "Instant.ofEpochMilli(doc.created.date.millis).atZone(ZoneId.of(params.tz)).hour",
               "params": {
                  "tz": "Europe/London"
              }
            }
          }
        }
      }
    }
  }
}

关于elasticsearch - 在 Elasticsearch 中,如何将时区应用于脚本化日期操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40476135/

相关文章:

amazon-web-services - 从一个AWS Elasticsearch集群迁移到不同区域的另一个AWS ElasticSearch集群

c# - 如何确定在 C# 中发送电子邮件的时区

java - 无法使用 Java 8 中的 ZoneDdateTime 将 IST [亚洲/加尔各答] 转换为 AEST [澳大利亚/悉尼]

ios - NSTimezone 从 timezoneId 获取缩写

elasticsearch - 支持无痛语言的最小版本的kibana是什么

ElasticSearch 6.0.1 : . ../_forcemerge API 不能随更多线程扩展(被限制?)

elasticsearch - 在ElasticSearch 7.6中搜索别名时,如何仅从一个索引读取并将另一个索引设置为write?

elasticsearch - 无痛(Elasticsearch)无法使用关键字-脚本错误

elasticsearch - Elasticsearch,为什么添加元素总是为空

elasticsearch - 如何查看文档中索引的同义词?