расширение поля списка в документе elasticsearch

У меня есть поле user_data в моем документе индекса elasticsearch, например;

образец документа:

user_data : [
             {
                 userid :1,
                 order_id :32
             },
             {
                 userid :8,
                 order_id : 99
             }
         ]

В моей памяти есть еще один набор пользовательских данных, который я хочу расширить (добавляя список в список)

данные в памяти:

preserved_user_data : [
                 {
                     userid :991,
                     order_id :89
                 },
                 {
                     userid :89,
                     order_id :76
                 }
           ]

Я хочу обновить этот документ до:

user_data : [
             {
                 userid :1,
                 order_id :32
             },
             {
                 userid :8,
                 order_id : 99
             },
             {
                 userid :991,
                 order_id :89
              },
             {
                 userid :89,
                 order_id :76
             }
            ]

я пробовал использовать скрипт ctx._source.user_data += params.preserved_user_data, но он делает поле документа пустым массивом.

P.S. Я делаю это через параллельную массовую обработку, используя тип операции: обновление в ES 7.1.1


person DARK_C0D3R    schedule 09.03.2020    source источник


Ответы (1)


Пример запроса с использованием сценария обновления для добавления массива к массиву в документе

Запрос:

POST index35/_update/tg8DwHAB4HO3_VSZUdzR
{
  "script": {
    "lang": "painless",
    "inline": "if(!ctx._source.containsKey('user_data')){ctx._source['user_data']=[]} for(int i=0;i<params.data.length;i++){ctx._source.user_data.add(params.data[i])}",
    "params": {
      "data": [
        {
          "userid": 991,
          "order_id": 89
        },
        {
          "userid": 89,
          "order_id": 76
        }
      ]
    }
  }
}

Результат:

   "hits" : [
      {
        "_index" : "index35",
        "_type" : "_doc",
        "_id" : "tg8DwHAB4HO3_VSZUdzR",
        "_score" : 1.0,
        "_source" : {
          "user_data" : [
            {
              "userid" : 1,
              "order_id" : 32
            },
            {
              "userid" : 8,
              "order_id" : 99
            },
            {
              "userid" : 991,
              "order_id" : 89
            },
            {
              "userid" : 89,
              "order_id" : 76
            }
          ]
        }
      }
    ]
  }
person jaspreet chahal    schedule 09.03.2020
comment
Спасибо :) не могли бы вы поделиться каким-нибудь источником для изучения скриптов в elasticsearch - person DARK_C0D3R; 09.03.2020
comment
Вы можете проверить документацию по эластичному поиску elastic.co/ руководство/en/elasticsearch/reference/current/. Как только вы поймете, как получить доступ к полям в документах, остальная структура будет больше похожа на C. - person jaspreet chahal; 09.03.2020