Запретить объединение внутренних объектов в конфигурации logstash - PullRequest
0 голосов
/ 16 сентября 2018

считают, что эта запись хранится в Elasticsearch:

{ 
"id" : 1
"Name" : "a",
"Obj" : { "old" : 123 }
}

и я хочу обновить эту запись следующим образом:

{
"id" : 1
"Family" : "b",
"Obj" : { "new": 321 }
}

наконец-то я хочу, чтобы эта запись существовала в эластичном:

{
"id" : 1
"Name" : "a",
"Family" : "b",
"Obj" : { "new" : 321 }
}

но у меня это по-настоящему:

{
"id" : 1
"Name" : "a",
"Family" : "b",
"Obj" : { **"old": 123** , "new" : 321 }
}

моя конфигурация logstash:

{
...
output {
  stdout {}
  elasticsearch { 
    hosts => ["localhost:9200"]
    index => "test" 
    action => "update"
    doc_as_upsert => true
    document_id => "%{id}"
  }
}

Я даже пытался удалить это поле (Obj) с помощью сценария:

...
action => "update"
doc_as_upsert => true
**script => "ctx._source.remove('Obj')"**
...

но он был удален после действия обновления, и эта запись будет отображаться в эластичном:

{
"id" : 1
"Name" : "a",
"Family" : "b"
}

и замена поля скриптом не сработала:

...
action => "update"
doc_as_upsert => true
**script => "ctx._source.Obj = doc[Obj]"**
...

получил эту ошибку в logstash: Variable [Obj] is not defined Есть ли идея, чтобы запретить операцию upsert из поля слияния obj?

...