read

운영환경 Document를 업데이트 해야 하는 이슈가 종종 있어 나를 위해 정리합니다.
터미널에서 진행하였습니다.

goal

특정 id를 가진 Document 내 1개 필드(Field) 값을 변경하려고 합니다.

AS-IS TO-BE
serviceOpenStatus = 0 serviceOpenStatus = 1

운영 환경

  • OS Version : CentOS Linux release 7.4
  • ElasticSearch Version : 2.3.0

mapping

serviceOpenStatus의 필드 데이터 타입을 확인하기 위해 매핑정보를 확인합니다.

실제 운영 데이터의 필드가 많아 예시용으로 간단하게 줄였습니다.
serviceOpenStatus의 데이터 타입은 long 이군요.

$ curl localhost:9200/willow/car/_mapping

{
  "willow": {
    "mappings": {
      "car": {
        "properties": {
          "approveDate": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis"
          },
          "approveStatus": {
            "type": "integer"
          },
          "asRequestId": {
            "type": "string"
          },
          "serviceOpenStatus": {
            "type": "long"
          }
        }
      }
    }
  }
}

Select

변경하고자 하는 Document를 조회합니다.
_version49, serviceOpenStatus 의 값은 0 입니다.

$ curl localhost:9200/willow/car/0023637E9830
{
  "_index": "willow",
  "_type": "car",
  "_id": "0023637E9830",
  "_version": 49,
  "found": true,
  "_source": {
    "approveDate": 1636507544404,
    "approveStatus": 2,
    "asRequestId": "",
    "serviceOpenStatus": 0
  }
}


Update 시 사용할 문서의 본문을 _source 명령을 추가하여 데이터를 가져옵니다.

$ curl localhost:9200/willow/car/0023637E9830/_source
{
  "approveDate": 1636507544404,
  "approveStatus": 2,
  "asRequestId": "",
  "serviceOpenStatus": 0
}

Update

지난 포스팅에서 ElasticSearch 2.3.0 버전에서 POST 와 PUT 이 동일하게 동작하는것을 확인하였습니다.

POST, PUT 메서드는 동일 Document 값을 변경하게되면 _version 값은 1 올리고, _source의 Data는 삭제하고 신규 생성합니다.
그래서 특정필드 1개만 변경하고자 할때에도 기존 데이터도 함께 포함해야 합니다.

serviceOpenStatus 의 값을 1로 변경한 후 POST 실행합니다.

$ curl -X POST "localhost:9200/willow/car/0023637E9830" -d'
{
  "approveDate": 1636507544404,
  "approveStatus": 2,
  "asRequestId": "",
  "serviceOpenStatus":1
}'

Select

변경한 내용이 적용되었는지 확인합니다.

_version50, serviceOpenStatus 의 값은 1로 바뀌었네요.

$ curl localhost:9200/willow/car/0023637E9830
{
  "_index": "willow",
  "_type": "car",
  "_id": "0023637E9830",
  "_version": 50,
  "found": true,
  "_source": {
    "approveDate": 1636507544404,
    "approveStatus": 2,
    "asRequestId": "",
    "serviceOpenStatus": 1
  }
}

ElasticSearch

Blog Logo

Weeping Willow


Published

Image

Willow's Blog

Welcome!

Back to Overview