我正在尝试对多个文档运行批量更新语句。然而,我想为它们执行相同的script。
让我们看一下下面的例子:
POST _bulk
{ "update": {"_id": "1", "_index": "test", "retry_on_conflict" : 3} }
{ "script": { "source": "ctx._source.count2 = params.count2", "lang": "painless", "params": { "count2": 4 }}}
{ "update": {"_id": "2", "_index": "test", "retry_on_conflict" : 3} }
{ "script": { "source": "ctx._source.count2 = params.count2", "lang": "painless", "params": { "count2": 4 }}}
{ "update": {"_id": "3", "_index": "test", "retry_on_conflict" : 3} }
{ "script": { "source": "ctx._source.count2 = params.count2", "lang": "painless", "params": { "count2": 4 }}}在我的特定场景中,脚本更加复杂。有没有什么方法可以重用相同的脚本语句?
我故意不使用update_by_query命令,因为它缺少冲突重试机制。
谢谢
发布于 2020-09-07 21:05:52
你绝对可以将脚本存储在ES中,并在批量更新中引用它:
首先,存储您的脚本:
POST _scripts/my-script
{
"script": {
"lang": "painless",
"source": "ctx._source.count2 = params.count2"
}
}然后,使用它:
POST _bulk
{ "update": {"_id": "1", "_index": "test", "retry_on_conflict" : 3} }
{ "script": { "id": "my-script", "params": { "count2": 4 }}}
{ "update": {"_id": "2", "_index": "test", "retry_on_conflict" : 3} }
{ "script": { "id": "my-script", "params": { "count2": 4 }}}
{ "update": {"_id": "3", "_index": "test", "retry_on_conflict" : 3} }
{ "script": { "id": "my-script", "params": { "count2": 4 }}}https://stackoverflow.com/questions/63778168
复制相似问题