공부/기록

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 에 보다 많은 양의 데이터가 들어갈 수 있기 때문에 쿼리의 속도가 늦어질 수 있음