当前位置: 首页 > 面试题库 >

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

羊毅庵
2023-03-14
问题内容

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

如何编辑"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',
              },
            },
          },
        },
      },
    },

问题答案:

这样的事情应该起作用:

{
  "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的内联脚本。请参阅:此讨论。

注意。上面的内容无法正常工作,因为它已被锁定,并且不允许您编辑白名单。。



 类似资料:
  • 我尝试使用从UTC中添加/减去偏移量,但我不知道如何反制夏令时。我不确定我的方向是否正确。 如何在JavaScript中将时间从不同的时区转换为本地时间?

  • 问题内容: 我正在尝试使用Elasticsearch的脚本语言来操纵日期。具体来说,我尝试增加4小时,即14,400秒。 这抛出 谢谢 问题答案: 解决方案是使用 但是,我实际上想将其用于重新索引,但格式略有不同。这是我在api中操纵时间的版本 这是可读版本的内联脚本 这是无痛支持的功能列表,很痛苦。

  • 问题内容: 使用elasticsearch,我试图将计算出的字段添加到地理搜索中。我只想在搜索文档中附加一个额外的计算字段,但是当我通过“ script_fields”添加计算字段时,仅返回该字段。 我尝试添加通配符字段部分,但它不会影响结果。 如何使此查询返回添加了额外计算字段的? 问题答案: 不建议检索字段,而应使用源过滤。 所以,代替这个 用这个:

  • 问题内容: 我为Jenkins作业编写了一个批处理脚本,该脚本会编译“ .net”代码,其中的步骤之一是在提取新的已编译代码之前备份当前目录。 我正在使用这些行来提取要插入备份文件名的日期和时间: 问题在于其输出看起来像这样: 这导致文件名是: 这是一个问题。 我想从时间变量中忽略“ AM”,怎么办? 问题答案: 因为您显然对Powershell的使用没有问题,所以将前两行替换为: 然后,在变量中

  • 我有一张谷歌表,上面有日期时间数字,格式如下:42385.7441666700 我正在写一个脚本,我想以HH:MM的格式从这些数字中提取时间。上述数字应返回17:51。 我尝试了此代码,但不起作用: