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만 변경한 상태로 기존과 동일하게 사용할 수 있다.
'Elasticsearch' 카테고리의 다른 글
[Elasticsearch] csv 파일 저장하기 (0) | 2018.04.09 |
---|---|
[Elasticsearch] 인덱싱 다시 하기 (reindex) -remote 서버 (0) | 2018.02.28 |
[Elasticsearch] 특정 필드 지우기 (0) | 2018.02.24 |
[Elasticsearch] Snapshot & Restore 하기 (0) | 2017.10.09 |