这是一个时髦的脚本。问题是 ctx._source.academies.remove(index),因为ctx在此处不可见。索引变量是正确的...但是我不能在那里使用ctx。有什么建议么?
{
"script" : "ctx._source.academies.eachWithIndex { it, index -> if(it['academy_id'] == academy_id) ctx._source.academies.remove(index) }",
"params": {
"academy_id": 344
}
}
最佳答案
你有试过吗
ctx._source.academies.removeAll { it['academy_id'] == academy_id }
如果需要检查与项目列表匹配的
academy_id
,则可以使用以下内容:(闭包应满足条件)ctx._source.academies.removeAll { it['academy_id'] in [academy_id, some_other_id] }
从 Elasticsearch 的 Angular 来看,我认为脚本可以如下重写:
{
"script" : "ctx._source.academies.removeAll { it['academy_id'] in academy_ids }",
"params": {
"academy_ids": [344, 345, 346]
}
}
关于elasticsearch - Elasticsearch Groovy脚本eachWithIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166777/