Elasticsearch reindex 여러 인덱스 한번에 할때는 index이름을 변경해야한다.

brody·2021년 9월 29일
0

엘라스틱서치

목록 보기
4/5

reindex시 index명 바꾸며 그대로 이동

아래와 같이 쓰면, 모든 index들이 그대로 신규 clsuter로 이동한다.

log-test-1 -> log-test2-1
log-test-2 -> log-test2-2

POST _reindex?wait_for_completion=false
{
  "conflicts": "proceed",
  "source": {
    "remote": {
      "host": "http://ip:port",
      "username": "elastic",
      "password": "elastic"
    },
    "index": "log-test-*"
  },
  "dest": {
    "index": "log-test2",
    "op_type": "create"
  },
  "script": {
    "lang": "painless",
    "source": "ctx._index = 'log-test2' + (ctx._index.substring('log-test-'.length(), ctx._index.length()))"
  }
}

es공식문서에서 위와같이 가이드하는데, 도데체 ctx._index가 remote의 index인지 dest의 index인지 헷갈린다.

reindex시 index명을 그대로 두고는 이동 못함

그런데 아래와 같이, index명을 유지하고자 하는 경우에는 의도와 다르게 log-test2 하나의 인덱스로 전부 이동한다.

log-test-1 -> log-test2
log-test-2 -> log-test2

POST _reindex?wait_for_completion=false
{
  "conflicts": "proceed",
  "source": {
    "remote": {
      "host": "http://ip:port",
      "username": "elastic",
      "password": "elastic"
    },
    "index": "log-test-*"
  },
  "dest": {
    "index": "log-test",
    "op_type": "create"
  },
  "script": {
    "lang": "painless",
    "source": "ctx._index = 'log-test' + (ctx._index.substring('log-test-'.length(), ctx._index.length()))"
  }
}

https://discuss.elastic.co/t/reindex-multiple-indices-from-remote-with-the-same-name/171674/4

위와 관련해 ES소스 내부에서 index이름이 달라졌을 경우에만 script를 적용하고 있다. 그래서 같은 이름으로 reindex하려면 index별로 건건히 해줘야함...
아호...

profile
일하며 하는 기록

0개의 댓글