首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elasticsearch中,如何将时区应用于脚本化的日期操作?

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

Stack Overflow用户
提问于 2016-11-07 22:53:15
回答 2查看 4.3K关注 0票数 6

通过下面的聚合并使用ES5,我希望获得基于给定时区的dayOfWeek & hourOfDay (作为来自TZ数据库的标识符提供)。

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

代码语言:javascript
复制
    aggs: {
      dayOfWeek: {
        terms: {
          script: {
            inline: "doc['created'].date.dayOfWeek",
            lang: 'painless',
          },
        },
        aggs: {
          hourOfDay: {
            terms: {
              script: {
                inline: "doc['created'].date.hourOfDay",
                lang: 'painless',
              },
            },
          },
        },
      },
    },
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-10 12:43:21

像这样的事情应该有效:

代码语言:javascript
复制
{
  "size": 0,
  "aggregations": {
    "dayOfWeek": {
      "terms": {
        "script": {
          "inline": "doc['created'].date.setZone(org.joda.time.DateTimeZone.forID(tz)); doc['created'].date.dayOfWeek",
          "lang": "groovy",
          "params": {
            "tz": "Europe/London"
          }
        }
      },
      "aggs": {
        "hourOfDay": {
          "terms": {
            "script": {
              "inline": "doc['created'].date.setZone(org.joda.time.DateTimeZone.forID(tz)); doc['created'].date.hourOfDay",
              "lang": "groovy",
              "params": {
                "tz": "Europe/London"
              }
            }
          }
        }
      }
    }
  }
}

您可能需要将script.engine.groovy.inline.aggs: on添加到elasticsearch.yml文件中,从而为groovy启用内联脚本。见:这一讨论

请注意。上面的工作不会无痛,因为它是锁定和不允许编辑白名单。

票数 5
EN

Stack Overflow用户

发布于 2017-10-19 13:20:03

用无痛的方法解决问题。因为他们正在将elasticsearch从Joda迁移到本地java.time,所以对Joda的支持在无痛方面不是很好。

代码语言:javascript
复制
{
  "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"
              }
            }
          }
        }
      }
    }
  }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40476135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档