эластичный поиск - обновить конкретный вложенный объект - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть документы отеля, в каждом из которых есть номера вложенного типа.

{
id: hotel_id,
   rooms: [
     {
        id: room_id_1,
        name: "room 1 name"
      },
      {
        id: room_id_2,
        name: "room 2 name"
      },
      ....
  ]
}

И я хочу обновить только одно поле из определенной комнаты. Я пытаюсь обновить API, обновить комнату с идентификатором 2 из документа отеля с идентификатором 1:

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.

Спасибо!

1 Ответ

1 голос
/ 01 ноября 2019

Вам нужно перебрать 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"
    }  
  } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...