在 ElasticSearch 中使用带有脚本的术语聚合(动态脚本被禁用时)
Using Terms Aggregation with a script in ElasticSearch (while dynamic scripting is disabled)
我正在 ElasticSearch 中执行包含以下代码的查询:
"aggs": {
"day_of_week": {
"terms": {
"script": "def myDate = new DateTime(doc['timestamp'].date); myDate.withZone(DateTimeZone.forID(timeZoneInfo)).getDayOfWeek()"
"size": 0
}
}
}
问题是出于安全原因,动态脚本现在默认被禁用,因此这将失败并显示错误 "ScriptException[dynamic scripting for [groovy] disabled]"。有关动态脚本的更多信息,请参阅此页面:https://www.elastic.co/blog/running-groovy-scripts-without-dynamic-scripting
我知道解决此问题的建议方法是使用脚本文件。不幸的是,这似乎不受条款聚合的支持(它只对过滤器有效吗?)。
任何帮助解决这个问题将不胜感激,因为出于安全目的我真的不能启用动态脚本。
所以看起来这是可能的 - 我只是使用了不正确的格式。在我的例子中,我创建了一个名为 "date_time_zoned_hour_of_day" 的 groovy 脚本文件并将其添加到 elasticsearch/config/scripts。
代码如下:
"aggs": {
"day_of_week": {
"terms": {
"script": "date_time_zoned_hour_of_day",
"params": {
"timeZone": "America/Vancouver"
},
"size": 0
}
}
}
我正在 ElasticSearch 中执行包含以下代码的查询:
"aggs": {
"day_of_week": {
"terms": {
"script": "def myDate = new DateTime(doc['timestamp'].date); myDate.withZone(DateTimeZone.forID(timeZoneInfo)).getDayOfWeek()"
"size": 0
}
}
}
问题是出于安全原因,动态脚本现在默认被禁用,因此这将失败并显示错误 "ScriptException[dynamic scripting for [groovy] disabled]"。有关动态脚本的更多信息,请参阅此页面:https://www.elastic.co/blog/running-groovy-scripts-without-dynamic-scripting
我知道解决此问题的建议方法是使用脚本文件。不幸的是,这似乎不受条款聚合的支持(它只对过滤器有效吗?)。
任何帮助解决这个问题将不胜感激,因为出于安全目的我真的不能启用动态脚本。
所以看起来这是可能的 - 我只是使用了不正确的格式。在我的例子中,我创建了一个名为 "date_time_zoned_hour_of_day" 的 groovy 脚本文件并将其添加到 elasticsearch/config/scripts。
代码如下:
"aggs": {
"day_of_week": {
"terms": {
"script": "date_time_zoned_hour_of_day",
"params": {
"timeZone": "America/Vancouver"
},
"size": 0
}
}
}