считают, что эта запись хранится в 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?