Delete API는 id를 가지고 특정 index에서 JSON document를 삭제한다. 다음 예제는 twitter index, tweet type, id 값이 1인 JSON document를 삭제하는 것을 보여준다.
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/1'
위 delete operation의 결과는 다음과 같다.
{
"found" : true,
"_index" : "twitter",
"_type" : "tweet",
"_id" : "1",
"_version" : 2
}
Versioning
Index된 각 document는 version이 붙여진다. Document를 삭제할 때, version은 지우려고 하는 document가 실제로 지우려고 하는 것으로 적절한지 삭제하는 동안 변경되지 않는지 확신할 수 있게 한다. Delete를 포함하여 Document에 write operation이 매번 실행될 때마다 버전이 증가한다.
Routing
Routing을 제어하기 위해 indexing을 사용할 때, document를 삭제하기 위해서 routing value가 제공되어야만 한다. 예를 들면 다음과 같다.
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/1?routing=kimchy'
위의 결과는 id 1인 document를 삭제할 것이다. 하지만 사용자 기반으로 route될 것이다. 정확한 route없이 삭제하는 경우 document가 삭제되지 않을 수도 있다.
많은 경우에 routing value는 document를 삭제할 때 주어지지 않는다. 그러한 경우에서는 _routing이 required로 맵핑되었지만 routing이 없으면 전체 shard에 있는 값들을 자동으로 삭제할 것이다.
Parent
Parent parameter가 설정되면, routing parameter가 설정되는 것과 기본적으로 동일하다. Parent document를 삭제하는 것은 그 자식까지 자동으로 삭제하지는 않음에 유의하라. 주어진 id에 해당하는 parent의 모든 자식 document를 삭제하는 한가지 방법은 자동으로 생성되고 index된 field _parent로 child index를 삭제하는 쿼리 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html) 를 수행하는 것이다. 형식은 parent_type#parent_id이다.
Automatic index creation
Delete operation은 이전에 생성되지 않았으면 자동으로 index를 생성한다. (수동으로 index를 생성하는 index API를 확인하라). 그리고 이전에 생성되지 않았다면, 자동으로 특정 type에 대해 맵핑되는 type을 동적으로 생성한다. (mapping type을 수동으로 생성하는 put mapping AP?I에 대해서 확인하라.)
Distributed
Delete operation은 hash값으로 해당 shard id를 얻는다. 그리고 그 id group내의 primary shard로 redirect 되고, id group에 속한 shard replica로 (필요하다면) 복제된다.
Replication Type
[WARNING]
1.5.0에서 deprecated됨.
Async replication을 지정하는 것은 deprecate되었고, 버전 2.0.0에서는 삭제될 것이다.
Operation 복제 (replication)는 async 방식으로 replica로 처리될 수 있다. (operation은 primary shard에 수행되고 리턴될 것이다.) replication parameter는 async로 설정될 수 있다. (기본값은 sync이다.)
Write Consistency
Partition 내 (replication group) 에서 Operation이 active shard 수에 근거하여 실행되도록 허용된다면 통제하라. 그 값은 one, quorum, all이 있다. Consistency parameter는 node level 설정에서 기본적으로 action.write_consistency가 quorum으로 설정되어 있다.
예를 들면, 2개의 replica index를 가지는 N개의 shard가 있다면, operation이 성공하기 위해서는 적합한 partition (quorum)내에 최소한 2개의 active shard가 있어야만 할 것이다. 1개의 replica를 가지는 N개의 shard가 있는 시나리오에서는 하나의 shard active가 있어야 한다. (이 경우에는 one 과 quorum이 같다.)
Refresh
Refresh parameter는 적합한 primary를 refresh하고 delete operation이 일어난 이후 replica shard를 통해 검색할 수 있도록 true로 설정될 수 있다. True로 설정하는 것은 시스템에 과부하를 주지 않을 것이라는 주의 깊은 생각과 확신 하에 이루어져야 한다. (indexing하는데 느려질 수도 있다.)
Timeout
Delete operation을 수행하도록 할당된 primary shard는 delete operation이 수행되는 동안에는 이용할 수 없다. 몇가지 이유로 primary shard는 gateway로부터 즉시 복구되거나 재배치를 겪는다. 기본적으로 delete operation은 primary shard가 이용가능해질 때까지 1분을 기다릴 것이다. 그 이후에는 요청이 실패하고 error로 응답한다. Timeout parameter는 얼마나 오래 기다릴지 명시적으로 지정하는데 사용할 수 있다. 다음 예제에서는 timeout값을 5분으로 설정했다.
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/1?timeout=5m'
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/729