[Elastic Search] Update (수정)
ElasticSearch의 Update 기능은 기존 문서를 수정하는 과정입니다. Update 작업은 HTTP POST
또는 PUT
요청을 통해 이루어지며, 특정 문서의 내용을 변경하거나, 문서가 존재하지 않는 경우에는 새로운 문서를 생성할 수 있습니다.
1. 부분 업데이트 (Partial Update)
기존 문서의 특정 필드만 수정하고 싶을 때는 POST
요청을 사용해 부분 업데이트를 수행할 수 있습니다. ElasticSearch는 문서를 찾아서 지정된 필드만 업데이트하며, 나머지 필드는 변경되지 않습니다.
1.1 스크립트를 사용한 업데이트
ElasticSearch에서는 스크립트를 사용해 문서의 특정 필드를 동적으로 업데이트할 수 있습니다.
# 예제
POST /my_index/_update/1
{
"script": {
"source": "ctx._source.price += params.increment",
"params": {
"increment": 1000
}
}
}
응답에서는 문서의 버전이 증가했음을 나타내는 _version
필드와, 업데이트가 성공적으로 완료되었음을 나타내는 "result": "updated"
필드를 확인할 수 있습니다.
1.2 문서의 필드를 직접 수정
문서의 특정 필드를 직접 수정하려면 doc
옵션을 사용하여 해당 필드를 지정합니다.
# 예제
POST /my_index/_update/1
{
"doc": {
"message": "홍길동님, 새로운 메시지가 도착했습니다!"
}
}
이 요청은 my_index
색인의 ID가 1
인 문서에서 message
필드를 새로운 값으로 업데이트합니다.
# 응답
{
"_index": "my_index",
"_id": "1",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
이 응답에서도 문서의 버전이 증가했음을 확인할 수 있습니다.
2. Upsert (업서트)
Update
작업 중에 문서가 존재하지 않는 경우에는 문서를 생성하도록 할 수 있습니다. 이를 Upsert
라고 하며, doc_as_upsert
옵션을 사용하여 수행합니다.
# 예제
POST /my_index/_update/2
{
"doc": {
"user": "김철수",
"message": "안녕하세요, 김철수입니다."
},
"doc_as_upsert": true
}
이 요청은 ID가 2
인 문서를 찾은 후, 존재하지 않으면 새로운 문서를 생성합니다.
# 응답
{
"_index": "my_index",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
응답에서는 문서가 새로 생성되었음을 나타내는 "result": "created"
필드를 확인할 수 있습니다.
3. 전체 문서 교체
문서를 수정하는 대신, 전체 문서를 새로운 내용으로 교체할 수도 있습니다. 이 작업은 PUT
요청을 사용하여 이루어집니다.
# 예제
PUT /my_index/_doc/1
{
"user": "홍길동",
"message": "홍길동님, 전체 문서가 새로 교체되었습니다.",
"status": "active"
}
이 요청은 ID가 1
인 문서를 전체적으로 새 내용으로 교체합니다.
# 응답
{
"_index": "my_index",
"_id": "1",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
이 경우에도 문서의 버전이 증가한 것을 확인할 수 있습니다.
Leave a comment