У меня есть хранилище данных 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));
`