这是一个时髦的脚本。问题是 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
}
}
答案 0 :(得分:1)
你试过这个吗?
ctx._source.academies.removeAll { it['academy_id'] == academy_id }
如果您需要检查匹配项目列表的academy_id
,则可以使用以下内容:(闭包应符合标准)
ctx._source.academies.removeAll { it['academy_id'] in [academy_id, some_other_id] }
从弹性搜索的角度来看,我认为脚本可以改写如下:
{
"script" : "ctx._source.academies.removeAll { it['academy_id'] in academy_ids }",
"params": {
"academy_ids": [344, 345, 346]
}
}
答案 1 :(得分:0)
这是最好的解决方案吗?
def findIndex; ctx._source.academies.eachWithIndex { it, index -> if(it['academy_id'] == academy_id) findIndex = index }; ctx._source.academies.remove(findIndex)
但这仅适用于最后找到的对象