elasticsearch - Elasticsearch Groovy脚本eachWithIndex

标签 elasticsearch groovy

这是一个时髦的脚本。问题是 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/

相关文章:

jenkins - Jenkins 管道中的条件步骤/阶段

grails - 如何在 Config.groovy 中指定目标目录?

ElasticSearch - 无法解析搜索源。预期的字段名称但得到了 [START_OBJECT]

elasticsearch - 创建索引时出现Elasticsearch错误

python - Elasticsearch 词聚合中的问题

groovy - 为什么 DataFlow 变量只能分配一次

json - ElasticSearch-将查询匹配与通配符组合

elasticsearch - BM25与Elasticsearch中二项项频率的相似性

grails - 在一个servlet容器中部署的Grails应用程序的不同日志文件

java - 如何在 grails Controller 中找到我的 servlet 的当前目录位置? (或 java servlet)