1 minute read

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
}

이 경우에도 문서의 버전이 증가한 것을 확인할 수 있습니다.

Categories:

Updated:

Leave a comment