Opensearch reindex API 정리하면서 찾아본 용도별 사용하는 쿼리
reindex API 용도
- 매핑 변경 : 기존 인덱스의 필드 타입을 변경하고 싶을 때
- 데이터 필터링 : 특정 조건에 맞는 데이터만 옮기고 싶을 때
- 백업 목적 : 인덱스를 복사하여 안전하게 테스트할 때
- 새로운 설정 적용 테스트 : 분석기 변경, 샤드 설정 변경 등을 적용해볼 때
매핑 변경(dest 인덱스 매핑 변경하여 생성. 동일한 필드명의 매핑 수정은 불가능),
백업(reindex API 호출하면 새로운 인덱스에 데이터 저장),
새로운 설정 적용 테스트(dest 인덱스 생성 시 number_of_shards 나 analyzer를 새로운 것으로 적용)는 쿼리가 필요한건 아니어서 생략
reindex로 데이터를 복사할 때 조건을 설정하여 일부 데이터만 복사할 수 있다.
logDate 매핑 값을 기준으로 7일 이내에 생성된 데이터만 복사하는 경우POST _reindex
{
"source": {
"index": "old_index",
"query": {
"range": {
"logDate": {
"gte": "now-7d/d"
}
}
}
},
"dest": {
"index": "new_index"
}
}
스크립트를 사용하여 원본 데이터를 변경한 뒤 reindex할 수도 있다.
price 매핑 값을 10% 증가시켜 복사하려는 경우POST _reindex
{
"source": {
"index": "products"
},
"dest": {
"index": "products_new"
},
"script": {
"lang": "painless",
"source": "ctx._source.price = ctx._source.price * 1.1"
}
}