我正在尝试使用以下update_by_query更新大量文档。 有效载荷是这样的:
考虑一个案例:
currentValues.status字段的值已从" New"更改为到"固定"
currentValues.priority字段的值从" High"到"低"
所以基本上是这样的
1]我想记录参数exa的旧值:" status"," priority"并将其分配给" oldValues"在他们更新之前。
2]更新后,我想将它们分配给" currentValues"
{
"oldValues": {
"status": "New",
"priority": "High",
.
.
.
many other fields
},"currentValues": {
"status": "Fixed",
"priority": "Low",
.
.
.
many other fields
}
}
我试图通过以下脚本来实现。
POST http://localhost:9200/index/type/_update_by_query
{
"script": {
"inline": "ctx._source.data.oldValues.status=params.previousStatus;",
"params": {
"previousStatus": {"status": ctx._source.currentValues.status }, // **Unrecognized token 'ctx': was expecting ('true', 'false' or 'null')**
}
}
}
所以我试图将旧的状态值存储在某些常量中,即" previousStatus")" params"部分并在"脚本"中使用它节。
但看起来我们只能存储" params"节。
我们可以指定" ctx._source"的值字段到某个常数(exa:" previousStatus"
在上面的脚本中)" params"部分??
如果没有,有没有办法可以将旧值存储在某个变量中并使用它" script"。
提前致谢!
Sandeep
答案 0 :(得分:2)
您可以使用以下脚本将以前的值存储在旧状态,并将当前状态值更新为新值。
{
"script": {
"inline":
"ctx._source.data.oldValues.status=ctx._source.data.currentValues.status;
ctx._source.data.oldValues.priority=ctx._source.data.currentValues.priority;
ctx._source.data.currentValues.status=params.newState.status;
ctx._source.data.currentValues.priority=params.newState.priority;",
"params": {
"newState": {"status": "Fixed","priority": "Low" }
}
}
}