Создание/обновление массива объектов в выходных данных журнала elasticsearch

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

{
    "guid":"someguid",
    "nestedObject":{
        "field1":"val1",
        "field2":"val2"
    }
}

Я ожидаю, что документ с идентификатором уже будет присутствовать в elasticsearch, когда произойдет это обновление. Вот что я хочу иметь в своем эластичном поисковом документе после 2 upserts:

{
    "oldField":"Some old field from original document before upserts."
    "nestedObjects":[{
        "field1":"val1",
        "field2":"val2"
        },
        {
        "field3":"val3",
        "field4":"val4"
        }]
}

Вот моя текущая настройка вывода эластичного поиска:

elasticsearch {
    index => "elastictest"
    action => "update"
    document_type => "summary"
    document_id => "%{guid}"
    doc_as_upsert => true
    script_lang => "groovy"
    script_type => "inline"
    retry_on_conflict => 3
    script => "
    if (ctx._source.nestedObjects) {
    ctx._source.nestedObjects += event.nestedObject
    } else {
    ctx._source.nestedObjects = [event.nestedObject]
    }
    "
    }

Вот ошибка, которую я получаю:

response=>{"update"=>{"_index"=>"elastictest", "_type"=>"summary",
"_id"=>"64648dd3-c1e9-45fd-a00b-5a4332c91ee9", "status"=>400, 
"error"=>{"type"=>"mapper_parsing_exception",
"reason"=>"failed to parse [event.nestedObject]", 
"caused_by"=>{"type"=>"illegal_argument_exception",
"reason"=>"unknown property [field1]"}}}}

person Nandan Phadke    schedule 29.08.2016    source источник


Ответы (1)


Проблема оказалась в внутренне сгенерированном сопоставлении в elasticsearch из-за других документов с тем же типом документа с конфликтующим типом в поле вложенный объект. Это привело к тому, что эластик выдал исключение при синтаксическом анализе картографа. Исправил это, исправил эту проблему.

person Nandan Phadke    schedule 07.09.2016