Elasticsearch 에서 Index Mapping 을 변경하는 방법은 PutMapping 을 사용하면 된다. 

하지만 기존에 있는 Field 의 Mapping type을 변경하려고 할 경우 exception 이 발생한다. 

resource_already_exists_exception
이를 해결하기 위해 reindex 를 사용한다. 


테스트를 위한 Index 를 생성해 본다. 


PUT twitter 
{
  "mappings": {
    "tweet": {
      "properties": {
        "createDate": {
          "type": "text"
        }
      }
    }
  }
}


tweet 의 message Filed type을 text로 생성하였다. 


POST twitter/tweet
{
  "createDate":"2018-04-09"
}

message 에 날짜형 데이터를 입력


 createDate Field type을 날짜형태로 변경하고 싶지만 resource_already_exists_exception 발생한다. 


PUT twitte2 
{
  "mappings": {
    "tweet": {
      "properties": {
        "createDate": {
          "type": "date"
        }
      }
    }
  }
}


다른이름의 인덱스를 생성하고 reindex 를 한다. 


POST _reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "twitte2"
  }
}

신규 Index 데이터를 조회해보면 2018-04-09 데이터가 들어가있는 것을 확인할 수 있다. 


GET twitte2/_search
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "twitte2",
        "_type": "tweet",
        "_id": "gl7kqWIBuq9a4FUGKTBc",
        "_score": 1,
        "_source": {
          "createDate": "2018-04-09"
        }
      }
    ]
  }
}


기존에 사용하던 index에 주었던 aliases 는 제거하고 신규로 추가한 index에 부여하여 사용하면

Filed type만 변경한 상태로 기존과 동일하게 사용할 수 있다. 






블로그 이미지

kyungseop

공부한 내용 정리

,