728x90
기존 인덱스의 필드 매핑 타입을 수정하고 싶을 경우 어떻게 해야 할까?
1. _reindex
ElasticSearch에서 데이터를 다른 인덱스로 복사하거나 이동하는데 사용되는 API이다.
기능 및 특징
- 기존 데이터를 새로운 인덱스에 복사할 수 있다.
- 데이터의 구조를 변경하거나 필드를 추가/삭제할 수 있다.
- 새로운 매핑 설정을 가진 인덱스를 생성한 후, 데이터를 이전하는 데 주로 사용된다.
- 데이터를 이동하면서 간단한 스크립트를 사용하여 필드 값을 변환할 수 있다.
주요 사용 사례
- 매핑 변경
기존 인덱스의 매핑을 수정할 수 없기 때문에 새로운 매핑으로 인덱스를 생성하고 `_reindex`를 사용해 데이터를 이동한다. - 데이터 정제 및 변환
`_reindex` 사용시 스크립트를 사용하여 데이터를 변환하거나 필드를 계산할 수 있다.
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
},
"script": {
"source": "ctx._source.new_field = ctx._source.old_field + ' transformed';"
}
}
But,,,
`_reindex` 는 굉장히 오래 걸리는 작업으로, 그냥 실행하게 되면 아래와 같은 오류를 마주하게 될 수 있다.
{"statusCode":502,"error":"Bad Gateway","message":"Client request timeout"}
따라서 해당 작업을 비동기로 실행시키는 옵션인 `wait_for_completion=false` 를 설정해주고 진행하는게 좋다.
POST _reindex?wait_for_completion=false
{
"conflicts": "proceed",
"source": {
"index": "es-log-202204*"
},
"dest": {
"index": "es-log-202204"
}
}
2. _forcemerge
인덱스의 세그먼트를 강제로 병합하여 디스크 사용량을 줄이고 성능을 최적화하는 데 사용된다.
기능 및 특징
- ElasticSearch는 데이터 추가와 삭제 시 새로운 세그먼트를 계속 생성하며, 삭제된 문서는 여전히 디스크 공간을 차지한다.
- `_forcemerge`는 여러 세그먼트를 병합하여 디스크 사용량을 줄이고 검색 성능을 향상시킨다.
GET es-log-202204/_segments?verbose=true
(전)
{
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"indices" : {
"es-log-202204" : {
"shards" : {
"0" : [
{
"routing" : {
"state" : "STARTED",
"primary" : true,
"node" : "W2DkVHboTtqIORuM3IzyOQ"
},
"num_committed_segments" : 21,
"num_search_segments" : 15,
"segments" : { ... }
}
]
}
}
}
}
`_forcemerge` 를 통해 segment 수를 줄여주자
POST es-log-202204/_forcemerge?max_num_segments=1
`max_num_segments는 병합 후 남길 세그먼트의 최대 수를 지정한다.
(후)
{
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"indices" : {
"curation-log-202204" : {
"shards" : {
"0" : [
{
"routing" : {
"state" : "STARTED",
"primary" : true,
"node" : "W2DkVHboTtqIORuM3IzyOQ"
},
"num_committed_segments" : 1,
"num_search_segments" : 1,
"segments" : { ... }
}
]
}
}
}
}
주의사항
- `_forcemerge`는 디스크 I/O를 많이 사용하기 때문에 클러스터 성능에 영향을 줄 수 있다. 따라서 비활성화된 인덱스에서 수행하는게 좋다.
- 병합하는 데이터가 많을수록 시간이 오래 걸린다.
728x90
'ElasticSearch & OpenSearch' 카테고리의 다른 글
[검색서비스] 어쩌다보니 이세계 검색서비스 담당자 (2) | 2024.01.19 |
---|---|
[Kibana] User 생성 방법 (0) | 2023.12.21 |
[OpenSearch] 수동 Snapshot (0) | 2023.05.16 |
[OpenSearch] index template (인덱스 템플릿) (0) | 2023.04.06 |
[ElasticSearch] _cat API 를 이용한 ES 모니터링 (0) | 2022.12.19 |