Elasticsearch удалить элемент объекта с соответствующим значением ключа - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть хранилище данных Elasticsearch с записями, которые выглядят следующим образом:

{
 "userid": "6a674b5d-879a-48b2-bd64-8e64fadfe39c",
 "arrayOfInformation": [
  {
   "type": "someType",
   "entryid": "2yhfb4bt2487g5sn"
   "stringName": "Name"
  }
 ]
}

Я хотел бы иметь возможность удалять элементы в определенном userid, которые соответствуют определенному entryid - идентификаторы уникальны, я только пытаюсь удалить данный идентификатор. Хотя у меня был бы некоторый интерес к удалению всех записей идентификатора для отлова случайных дубликатов, но это не требуется для моего основного варианта использования.

Я пытался использовать indexOf поиск, но это не было эффективным. В приведенном ниже примере есть некоторые элементы, которые могут не иметь смысла вне контекста, но по сути я ищу определенный userid, называемый здесь argRecordKey, и пытаюсь найти элемент, соответствующий предоставленному значению record.entryId:

        script: {
          inline: `ctx._source.${argRecordKey}.remove(ctx._source.${argRecordKey}.indexOf(params.${argRecordKey}))`,
          lang: 'painless',
          params: {
            [argRecordKey]: record.entryId
          },
        },

Обновление

Также попытался использовать скрипт для итерации и найти соответствующий идентификатор. Полезная нагрузка выглядит следующим образом (отсутствует некоторый контекст, поскольку внешняя библиотека преобразует его в фактический запрос к Elasticsearch)

          source: `
          int index;
          var entryId = params.${ argRecordKey }
          for(int i = 0; i<ctx._source.${ argRecordKey }.length; i++) {
            if (entryId.equals(a[I].entryId))
              index = i
          }
          ctx._source.${ argRecordKey }.remove(ctx._source.${ argRecordKey }.indexOf(index));
          `
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...