Я пытаюсь динамически добавлять новое поле типа массива в документы по мере необходимости. Если поле уже существует (т. Е. Кто-то уже добавил элемент в массив), добавьте мой элемент. Если он не существует, мне нужно создать поле, а затем добавить мой элемент.
В настоящее время я могу добавить только в том случае, если я сначала создам поле, но то, как я его написал, перезаписывает существующие значения поля, если они есть.
# Create the field, not ideal as it wipes the field if it existed already
es.update(
index='index_name',
id='doc_id_987324bhashjgbasf',
body = {"doc": {
'notes': []}})
# Append my value
es.update(index='index_name', id='doc_id_987324bhashjgbasf',
body = {
"script": {
"source": "ctx._source.notes.addAll(params.new_note)",
"lang": "painless",
"params": {
"new_note": [{'note': 'Hello I am a note', 'user':'Ari'}]
}
}
})
В идеале процесс, который я хотел бы,






журнал:
if [notes] {
notes.add("NewItem");
} else {
notes = new ArrayList();
notes.add("NewItem");
}
эластичный поиск:
"script": "if (ctx._source.containsKey(\"notes\")) {ctx._source.notes += value;} else {ctx._source.notes = [value]}"