2013-03-30 3 views
15

Elasticsearch에서 인덱싱 된 문서를 업데이트하는 방법을 이해하려고합니다. 어떻게 작동하는지 이해가 안되니? API가 수행하는 작업을 나타내는 ctx은 무엇입니까? 중첩 된 문서가있는 문서를 가지고 있다고 가정 해 보겠습니다.Elasticsearch에서 인덱싱 된 문서 업데이트

문서 삭제와 "업데이트 된"버전 색인 생성의 차이점은 무엇입니까?

답변

34

업데이트 요청은 elasticsearch에서 소스를 검색하고 수정 한 다음 elasticsearch로 다시 인덱싱합니다. 업데이트를 사용하여 문서 사본을 이미 가지고 있다면 거의 이해할 수 없습니다. 일반적으로 새 버전의 색인을 생성하는 것이 더 빠를 것입니다. 그러나 문서를 쉽게 사용할 수는 없지만 문서에 어떤 변경 사항을 적용할지 알고있는 경우 업데이트를 사용하는 것이 더 효율적일 수 있습니다. 예를 들어, 내가 차 문서의 사본이없는,하지만 난 이런 걸 할 수있는 새로운 창조자 추가하려면 : 업데이트 스크립트에서

curl -XDELETE localhost:9200/test 
curl -XPUT localhost:9200/test -d '{ 
    "settings": { 
     "index.number_of_shards": 1, 
     "index.number_of_replicas": 0 
    }, 
    "mappings": { 
     "car": { 
      "properties": { 
       "creators" : { 
        "type": "nested", 
        "properties": { 
         "name": {"type":"string"} 
        } 
       } 
      } 
     } 
    } 
} 
' 
curl -XPOST localhost:9200/test/car/1 -d '{ 
    "creators": [{ 
     "name": "Steve" 
    }] 
} 
' 
echo 
curl -XPOST localhost:9200/test/car/1/_update -d '{ 
    "script" : "ctx._source.creators += new_creator", 
    "params" : { 
     "new_creator" : {"name": "John"} 
    } 
}' 
echo 
curl "localhost:9200/test/car/1?pretty=true" 
echo 

ctx을 할 수있는 특별한 변수입니다 업데이트하려는 객체의 소스에 액세스합니다. ctx._source은 소스의 쓰기 가능 버전입니다. 스크립트에서이 문서를 수정할 수 있으며 수정 된 소스는 새 버전의 문서로 유지됩니다.

+0

또 다른 멋진 답변 주셔서 감사합니다 :) 그럼 당신은 먼저 문서를 삭제하고 다시 색인을 생성하여 Java 응용 프로그램에서 업데이트 방법을 만들 것입니다. – LuckyLuke

+9

먼저 문서를 삭제할 필요가 없습니다. 단순히 색인을 생성 할 수 있습니다. 동일한 ID를 가진 문서가 이미 존재하면 자동으로 삭제되고 새 버전으로 바뀝니다. – imotov

+0

신난다, 고마워. – LuckyLuke

관련 문제