2016-08-29 2 views
0

logstash로 탄성 검색 결과를 사용하는 데 문제가 있습니다. 여기 내 샘플 이벤트입니다elasticsearch에서 객체 배열 생성/업데이트 logstash 출력

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

이 업데이트가 발생할 때 id가있는 문서가 이미 elasticsearch에 존재할 것으로 기대합니다. 여기 내가 2 upserts 후 내 탄성 검색 문서에 갖고 싶어 것입니다 :

: 여기

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] 
    } 
    " 
    } 

나는 점점 오전 오류입니다 : 여기

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

현재의 내 탄성 검색 출력 설정은

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]"}}}} 

답변

0

nestedObject 필드에서 충돌하는 유형이있는 동일한 document_type을 가진 다른 문서 때문에이 문제는 elasticsearch에서 내부적으로 생성되었습니다. 이로 인해 탄성이 매퍼 구문 분석 예외를 throw합니다. 이 문제를 해결하여이 문제를 해결했습니다.