我正在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/