gpt4 book ai didi

ElasticSearch 无痛脚本,用于删除除键列表之外的所有键

转载 作者:行者123 更新时间:2023-12-02 22:57:16 27 4
gpt4 key购买 nike

我想在 Elasticsearch (6.1) 文档上执行原子更新操作,我想在其中删除除某些键(在顶层,未嵌套)之外的所有文档。

我知道要从文档中删除特定键(示例中为 something),我可以执行以下操作:

curl -XPOST 'localhost:9200/index/type/id/_update' -d '{
"script" : "ctx._source.remove(params.field)",
"params": {
"field": "something"
}
}'

但是,如果我想删除除名为 a 的字段之外的所有字段怎么办?和一个名为 b 的字段?

最佳答案

我找到了让它工作的方法。我在这里发布它,因为它可能对其他人有用:

POST /index/type/id/_update
{
"script" : {
"source" : "Object var0 = ctx._source.get(\"a\"); Object var1 = ctx._source.get(\"b\"); ctx._source = params.value; if(var0 != null) ctx._source.put(\"a\", var0); if(var1 != null) ctx._source.put(\"b\", var1);",
"params": {
"value": {
"newKey" : "newValue"
}
}
}

}

此脚本正在使用 params.value 中的内容更新文档同时保留 key ab从文档的先前版本。这种方法对我的用例来说更简单,因为与现有文档中存在的键数量相比,要保留的键列表会很小。

如果您只想保留键 a 并且首先将键存储在变量中,然后执行 ctx._source.clear()然后您将重新添加 key 。

关于ElasticSearch 无痛脚本,用于删除除键列表之外的所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339320/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com