ElasticSearch, добавляет значение к полю, но проверяет, существует ли поле первым, если нет, то создайте поле, затем добавьте - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь динамически добавить новое поле типа массива в документы, когда они ему нужны. Если поле уже существует (т. Е. Кто-то еще добавил элемент в массив), добавьте мой элемент.Если он не существует, мне нужно создать поле, а затем добавить свой элемент.

В настоящее время я могу добавить, только если я сначала создаю поле, но способ, которым я его написал, переписывает существующие значения поля, если они присутствуют..

# 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'}]
                      }
                  }
              })

В идеале процесс, который мне нужен, это

  1. Проверить, существует ли поле 'notes'
  2. Если оно существует, добавить новое значение к существующим значениям
  3. Если его не существует, создайте поле и добавьте мое значение

1 Ответ

1 голос
/ 27 мая 2019

logstash:

if [notes] {
    notes.add("NewItem");
} else {
   notes = new ArrayList();
   notes.add("NewItem");
}

elasticsearch:

"script": "if (ctx._source.containsKey(\"notes\")) {ctx._source.notes += value;} else {ctx._source.notes = [value]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...