처음으로 도큐먼트를 입력하면 결과에 "result" : "created" 로 표시가 됩니다. 동일한 URL에 다른 내용의 도큐먼트를 다시 입력하게 되면 기존 도큐먼트는 삭제되고 새로운 도큐먼트로 덮어씌워지게 됩니다. 이 때는 결과에 created가 아닌 updated가 표시됩니다.
my_index/_doc/1 재입력
PUT my_index/_doc/1
{
"name":"Jongmin Kim",
"message":"안녕하세요 Kibana"
}
실수로 기존 도큐먼트가 덮어씌워지는 것을 방지하기 위해서는 입력 명령에 _doc 대신 _create 를 사용해서 새로운 도큐먼트의 입력만 허용하는 것이 가능합니다. 입력하려는 도큐먼트 id에 이미 데이터가 있는 경우 아래와 같이 입력 오류가 나게 됩니다. 6.x 이전 버전에서는
PUT <인덱스>/<도큐먼트 타입>/<도큐먼트 id>/_create
형식으로 사용합니다.
_doc 대신 _create 로 새 도큐먼트 입력
PUT my_index/_create/1
{
"name":"Jongmin Kim",
"message":"안녕하세요 Elasticsearch"
}
DELETE 메서드를 이용해서 도큐먼트 또는 인덱스 단위의 삭제가 가능합니다. 두 경우에 차이가 있는데 먼저 DELETE my_index/_doc/1 명령으로 하나의 도큐먼트를 삭제하면 다음과 같이 도큐먼트가 삭제되었다는 "result" : "deleted" 결과가 리턴됩니다.
위 결과에서 도큐먼트 id "_id" : "ZuFv12wBspWtEG13dOut" 가 자동 생성 된 것을 확인할 수 있습니다.
_update
입력된 도큐먼트를 수정하기 위해서는 기존 도큐먼트의 URL에 변경될 내용의 도큐먼트 내용을 다시 PUT 하는 것으로 대치가 가능합니다. 하지만 필드가 여럿 있는 도큐먼트에서 필드 하나만 바꾸기 위해 전체 도큐먼트 내용을 매번 다시 입력하는 것은 번거로운 작업일 것입니다. 이 때는 POST <인덱스>/_update/<도큐먼트 id> 명령을 이용해 원하는 필드의 내용만 업데이트가 가능합니다. 업데이트 할 내용에 "doc" 이라는 지정자를 사용합니다.
my_index/_update/1 도큐먼트의 message 필드 업데이트
POST my_index/_update/1
{
"doc": {
"message":"안녕하세요 Kibana"
}
}
위 결과를 보면 "_version" : 2로 버전이 증가한 것을 확인할 수 있습니다. _update API 를 사용해서 단일 필드만 수정하는 경우에도 실제로 내부에서는 도큐먼트 전체 내용을 가져와서_doc 에서 지정한 내용을 변경한 새 도큐먼트를 만든 뒤 전체 내용을 다시 PUT 으로 입력하는 작업을 진행합니다.
6.x 이전 버전에서 _update API 는
POST <인덱스>/<도큐먼트 타입>/<도큐먼트 id>/_update
형식으로 사용합니다.
_update API를 이용해서 my_index/_doc/1 도큐먼트의 "message" 필드 값을 "안녕하세요 Kibana" 로 업데이트를 한 뒤 도큐먼트 내용을 확인 해 보겠습니다. my_index/_doc/1 도큐먼트를 삭제 하였다면 위의 내용을 참고해서 새로 입력 한 뒤 아래 명령을 실행합니다.