ElasticSearch 문서 업데이트, 삭제 하기

0

Elasticsearch 문서는 불변이기 때문에 일단 작성된 문서는 실제로 변경할 수 없지만 이 문제를 해결할 방법이 있다.

Elasticsearch는 입력한 모든 문서에 자동으로 _version 필드를 생성하는데, 문서를 업데이트하기 위해 증가한 _version 번호로 문서의 새 복사본을 작성한다. 중요한 것은 문서의 고유 ID와 버전을 함께 사용하는 것이다.

지정된 문서는 여러 버전을 가질 수 있으며 Elasticsearch는 자동으로 사용자가 작성한 최신 버전을 사용한다. 따라서 Elasticsearch에 업데이트 요청을 하면 완전히 새로운 문서가 생성되고 새 문서는 증가한 버전 번호로 작성된 후 이전 버전의 문서는 '삭제'로 표시된다.

Elasticsearch는 나중에 필요할 때마다 정리 작업을 수행하는데 이로인해
업데이트 이전 버전의 문서는 사라지게 된다.

curl에서 업데이트 요청은 다음과 같이 한다.

curl -XPOST 127.0.0.1:9200/movies/_doc/109487/_update -d '
{
	"doc": {
    	"title": "Interstellar foo"
    }
}'

이후 아래 명령어를 통해 _version 필드가 2가 된 것을 확인 할 수 있다.

curl -XGET 127.0.0.1:9200/movies/_doc/108487?pretty

참고로 일부 값 변경은 -XPOST, 전체 변경은 -XPUT을 이용한다.

curl -XPUT 127.0.0.1:9200/movies/_doc/109487?pretty -d '
{ 
	"genres": ["IMAX", "Sci-Fi"],
    "title": "Interstellar",
    "year": 2014
}'

다음은 document(문서) 삭제이다. http method를 delete로 하면 된다.
그 전에 영화 제목에 Dark를 포함하는 문서를 찾아보자 아래 명령어를 통해 확인된 문서의 id는 58559이다

curl -XGET 127.0.0.1:9200/movies/_search?q=Dark

Dark knight라는 타이틀을 갖는 문서를 삭제하는 명령어는 아래와 같다.

curl -XDELETE 127.0.0.1:9200/movies/_doc/58559?pretty
profile
Software engineer who is interested in server development, computer vision, and soccer

0개의 댓글