2016-06-27 25 views
1

문서를 업데이트하려고합니다 (목록에 요소를 추가 함). 존재하지 않는 경우 문서를 만들려고합니다. 예를 들어, id == Donald_Duck 인 문서에 목록 suggestions의 요소를 추가하고 싶으면 이미 추가하고 싶습니다. Python API를 사용하여 ElasticSearch 문서를 조건부로 업데이트하십시오.

name = 'Donald_Duck' 
suggestions = ['Donald', 'Donald duck', 'Duck', 'Duck Avanger'] 
body = { 
      "script" : "ctx._source.text += new_suggetions", 
      "params" : { "new_suggestions" : suggestions}, 
      "upsert" : suggestions 
     } 


es.update(index=INDEX_NAME, doc_type='test', id=name, body=body) 

불행하게도 내가 얻을 RequestError :

RequestError: TransportError(400, 'mapper_parsing_exception', 'failed to parse') 

이 내 매핑과 같은 모습입니다 :

mappings = { 
    "mappings": { 
    "test": { 
     "properties": { 
     "text": { 
        "type": "completion", 
        "analyzer" : "simple", 
        "search_analyzer" : "simple" 
     }, 
     } 
    } 
    } 
} 

가 어떻게이 문제를 해결할 수 있습니까? 문서가 여러 개있는 경우 동일한 코드를 bulk API와 함께 사용할 수 있습니까?

body = { 
    "script": "ctx._source.text += new_suggestions", 
    "params": { "new_suggestions" : suggestions}, 
    "upsert": { 
     "text": suggestions 
    } 
} 

게다가, 당신은 당신이 업데이트에 대한 스크립팅을 사용하도록 설정 한 확신 :

답변