gpt4 book ai didi

Elasticsearch 内联脚本 : can we use ctx. _source 字段在 "params"

转载 作者:行者123 更新时间:2023-12-02 22:13:23 26 4
gpt4 key购买 nike

我正在尝试使用以下 update_by_query 更新大量文档。有效载荷是这样的:

考虑一个案例:

currentValues.status 字段的值从“New”更改为“Fixed”
currentValues.priority 字段的值从“高”变为“低”

所以基本上
1] 我想记录参数 exa: "status","priority"的旧值,并在它们更新之前将其分配给 "oldValues"。
2]更新后我想将它们分配给“currentValues”

{
"oldValues": {
"status": "New",
"priority": "High",
.
.
.
many other fields
},"currentValues": {
"status": "Fixed",
"priority": "Low",
.
.
.
many other fields
}
}

我正在尝试使用以下脚本来做到这一点。

发布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')**
}
}
}

所以我试图将状态的旧值存储在某个常量中,即“params”部分中的(“previousStatus”),并在“脚本”部分中使用它。
但看起来我们只能在“params”部分存储常量值。
我们可以将“ctx._source”字段的值分配给某个常量(例如:“previousStatus” 在上面的脚本中)在“params”部分??
如果没有,有没有一种方法可以将旧值存储在某个变量中并使用它“脚本”。

提前致谢!

桑迪普

最佳答案

您可以使用以下脚本将以前的值存储在旧状态中,并将当前状态值更新为新值。

{
"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" }
}
}
}

关于Elasticsearch 内联脚本 : can we use ctx. _source 字段在 "params",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466962/

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