운영중인 인덱스를 가져와서 로컬에서 테스트를 하는 경우가 있다. 그럴때 다른 인덱스를 조회하는 쿼리를 실행해서 파일로 저장하고,
다시 그 파일을 읽어서 색인하는 방식을 생각할 수 있다. ( 본인이 그랬음... )
원래 reindex
기능이 있는건 알고 있었지만 사용하질 않았다.
배치를 로컬로 돌려서 색인하거나 같은 서버에서 사용하는데 왜쓰지? 라는 생각...
을 했는데 역시나.. 똑똑한 사람이라 그런지 원격지에 있는 ES서버의 색인도 reindex가 가능했다!!!
테스트는 Docker로 진행하였고 elasticsearch 7.13 이미지를 사용한다.
elasticsearch.yml
reindex.remote.whitelist: "TARGET_IP:9200"
예제에서는 whitelist를 0.0.0.0:9200 으로 하면 모든 IP 설정이라 어느 ES든 접근이 가능하다고 했는데 해당 설정으로 하면 예외가 발생한다. ( 설정이 안되었다는 예외 )
도커환경이라 그런지는 모르겠지만 직접적인 대상 IP를 지정해야 한다.
POST _reindex
{
"source": {
"remote": {
"host": "http://TARGET_IP:9200",
"username": "user",
"password": "password"
},
"index": "target-index"
},
"dest": {
"index": "new-index"
}
}