groovy - 在ElasticSearch中将术语汇总与脚本一起使用(禁用动态脚本时)

标签 groovy elasticsearch

我正在ElasticSearch中执行包含以下代码的查询:

"aggs": {
  "day_of_week": {
    "terms": {
      "script": "def myDate = new DateTime(doc['timestamp'].date); myDate.withZone(DateTimeZone.forID(timeZoneInfo)).getDayOfWeek()"
      "size": 0
    }
  }
}

问题在于,出于安全原因,默认情况下现在禁用了动态脚本,因此这将失败,并显示错误“ScriptException [禁用[groovy]的动态脚本]”。有关动态脚本的更多信息,请参见此页面:https://www.elastic.co/blog/running-groovy-scripts-without-dynamic-scripting

我知道解决此问题的建议方法是使用脚本文件。不幸的是,术语聚合似乎不支持此功能(是否仅对过滤器有效?)。

避免出现任何帮助将不胜感激,因为出于安全性考虑,我不能真正启用动态脚本。

最佳答案

所以看起来这是可能的-我只是使用了错误的格式。就我而言,我创建了一个名为“date_time_zoned_hour_of_day”的常规脚本文件,并将其添加到elasticsearch / config / scripts中。

代码如下:

"aggs": {
  "day_of_week": {
    "terms": {
      "script": "date_time_zoned_hour_of_day",
      "params": {
          "timeZone": "America/Vancouver"
      },
      "size": 0
    }
  }
}

关于groovy - 在ElasticSearch中将术语汇总与脚本一起使用(禁用动态脚本时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29567968/

相关文章:

dictionary - 键声明,其值来自之前在同一映射初始化中定义的现有键

elasticsearch - Elasticsearch日期查询。在某个月出生的人

java - Elasticsearch : Can't get Native (Java) Script working

java - 如何在 ElasticSearch 中构建不区分大小写的通配符查询?

elasticsearch - 包含字符串字段的对象上的嵌套术语聚合

java - Maven Surefire 不执行测试阶段

java - 如何在运行时转换包含groovy表达式的纯java字符串?

gradle - 为什么不能以相同的方式访问 "dependsOn"和 "description"任务属性?

elasticsearch - 带有数组的Elasticsearch script_score

grails - 在运行时重新定义域类映射