Elasticsearch Update API로 Document 교체하기

Elasticsearch Update API로 Document 교체하기

Elasticsearch 는 기본적으로 Update API를 통해 요청하면 요청한 필드만 딱 업데이트한다.

그런데 종종 문서를 교체해야하는 일이 있다. update문서를 보면 문서의 Replace를 원하는 경우 Index API를 이용하라고 가이드 되어있다.

To fully replace an existing document, use the index API. update 문서참고

하지만 Index API는 만약 기존 문서가 존재하지 않으면 새로 생성해버리는 문제가 있다. 만약 기존 문서의 교체 만을 원한 것이라면 이게 문제가 된다. 기존 문서 교체를 원해서 index api를 날렸는데 실수로 id를 다르게 적었다면, 내가 교체하려는 문서는 그대로 있고 새로운 id에 문서가 생성되는 상황이 발생한다.

update api와 script를 활용하면 이런 실수를 방지하면서 기존 문서를 교체할 수 있다.

예를 들어 아래와 같은 문서가 있다고 하자.

문서 1111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"_index" : "hello",
"_type" : "_doc",
"_id" : "1111",
"_version" : 1,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "boom",
"message" : "hello",
"extrafield" : 1
}
}

이 문서를

john hi
1
{"name": "john", "message": "hi"}

이렇게 고쳐주려면 다음과 같이 요청을 작성하면 된다.

UPDATE API 요청
1
2
3
4
5
6
7
8
9
10
11
12
13
14
POST hello/_update/13
{
"script":{
"source": """
ctx._source = params.data
""",
"params": {
"data": {
"user": "john",
"message": "hi"
}
}
}
}

끝.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×