Logsta sh создать do c если не существует еще добавить массив - PullRequest
0 голосов
/ 08 июля 2020

Я использую logsta sh для индексации событий из базы данных. Мне нужно передать сценарий в выходной вывод, чтобы проиндексировать событие.

Я пробую что-то похожее на:

POST my-index/test/1000000000000104816264/_update
{
  "script": {
        "source": "def targets = ctx._source.properties.example.findAll(cat -> { for (condition in params.conditions.entrySet()) { if (cat[condition.getKey()] != condition.getValue()) { return false; } } return true; }); for (cat in targets) { for (change in params.changes.entrySet()) { cat[change.getKey()] = change.getValue() } }",
    "params": {
      "conditions": {
        "Id": "1000000000000104816264",
        "Id_2": "10535454779"
      },
      "changes": {
        "descripcion": "My text Update",
        "tipo": "Type Update"
      }
    }
  }
}

Но я не знаю, как это сделать, чтобы если поиск ключей не существует, вставлю новый вложенный, а то если расширится, то обновит. Чтобы обновить, это работает, но я не знаю, как добавить добавление и в будущем удалить.

Как только вы сможете заставить это работать, идея состоит в том, чтобы использовать его в выводе logsta sh:

elasticsearch {
              hosts => "localhost:9200"
              index => "%{[@metadata][miEntidad]}"
              document_type => "%{[@metadata][miDocumento]}"                        
              document_id => "%{id}"
              action => "update" 
              doc_as_upsert => true
              script_type => "inline"
              script => "" # here I could refer to the script
              retry_on_conflict => "3"
        }
...