공부/기록
Elasticsearch reindex 시 timestamp에 시간 더하는 쿼리
촌쥐
2023. 5. 3. 15:21
Elasticsearch 에서 data stream에서 다른 data stream으로 데이터를 옮기면서 타임스탬프 값을 증가 해야할 일이 있었습니다. (정확하게는 하나의 data stream에 속하는 index에서 다른 data stream에 속한 index로 옮기는 작업이 였습니다.)
POST _reindex
{
"source": {
"index": "src-index-name",
"query": {
"range": {
"@timestamp": {
"lt": "2023-04-10"
}
}
}
},
"dest": {
"index": "dest-index-name",
"op_type": "create"
},
"script": {
"lang": "painless",
"source":
"""
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
ctx._source['@timestamp'] = LocalDateTime.parse(ctx._source['@timestamp'], dtf).plusHours(9).format(dtf);
"""
}
}
painless script가 jvm 기반이라 자바랑 비슷해서 이해하기는 어렵지 않은데 뭔가 ..
추가로 source의 src-index-name은 data stream도 사용가능 합니다.
확인이 필요한 점
- 해당 방법으로 reindex 할 경우 자동 rollover가 안되는 것으로 알고 있는데 해당 지식이 맞는 지 테스트가 필요합니다. rollover가 안될 경우 하나의 인덱스에 설정한 ilm 에 보다 많은 양의 데이터가 들어갈 수 있기 때문에 쿼리의 속도가 늦어질 수 있음