아래와 같이 쓰면, 모든 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인지 헷갈린다.
그런데 아래와 같이, 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별로 건건히 해줘야함...
아호...