弹性搜索 - 更新特定的嵌套对象
elastic search - update specific nested object
我有酒店文件,每个文件都有嵌套类型的房间。
{
id: hotel_id,
rooms: [
{
id: room_id_1,
name: "room 1 name"
},
{
id: room_id_2,
name: "room 2 name"
},
....
]
}
我只想更新特定房间的单个字段。我正在尝试更新 api,从 ID 为 1 的酒店文档更新 ID 为 2 的房间:
POST hotels/_update/1
{
"script" : {
"source" : "if(ctx._source.rooms.id == 2) { ctx._source.rooms.name = params.new_name }",
"lang" : "painless",
"params" : {
"new_name" : "new room name"
}
}
}
我从 ES 收到此错误 "Illegal list shortcut value [id]"。
谢谢!
您需要像这样遍历 rooms
:
POST hotels/_update/1
{
"script" : {
"source" : "for (int i=0; i < ctx._source.rooms.length; i++) {if(ctx._source.rooms[i].id == 2) { ctx._source.rooms[i].name = params.new_name; break } }",
"lang" : "painless",
"params" : {
"new_name" : "new room name"
}
}
}
我有酒店文件,每个文件都有嵌套类型的房间。
{
id: hotel_id,
rooms: [
{
id: room_id_1,
name: "room 1 name"
},
{
id: room_id_2,
name: "room 2 name"
},
....
]
}
我只想更新特定房间的单个字段。我正在尝试更新 api,从 ID 为 1 的酒店文档更新 ID 为 2 的房间:
POST hotels/_update/1
{
"script" : {
"source" : "if(ctx._source.rooms.id == 2) { ctx._source.rooms.name = params.new_name }",
"lang" : "painless",
"params" : {
"new_name" : "new room name"
}
}
}
我从 ES 收到此错误 "Illegal list shortcut value [id]"。
谢谢!
您需要像这样遍历 rooms
:
POST hotels/_update/1
{
"script" : {
"source" : "for (int i=0; i < ctx._source.rooms.length; i++) {if(ctx._source.rooms[i].id == 2) { ctx._source.rooms[i].name = params.new_name; break } }",
"lang" : "painless",
"params" : {
"new_name" : "new room name"
}
}
}