Я пытаюсь динамически добавить новое поле типа массива в документы, когда они ему нужны. Если поле уже существует (т. Е. Кто-то еще добавил элемент в массив), добавьте мой элемент.Если он не существует, мне нужно создать поле, а затем добавить свой элемент.
В настоящее время я могу добавить, только если я сначала создаю поле, но способ, которым я его написал, переписывает существующие значения поля, если они присутствуют..
# 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'}]
}
}
})
В идеале процесс, который мне нужен, это
- Проверить, существует ли поле 'notes'
- Если оно существует, добавить новое значение к существующим значениям
- Если его не существует, создайте поле и добавьте мое значение