在使用elasticsearch的过程中,肯定有很多朋友有过这种需求,就是将某个集群中的索引导入另外一个集群中去,这种情况呢,有两种办法,一种就是直接拷贝文件,简单粗暴,但是有很多弊端,比如说文件非常大的话拷贝起来也很麻烦,另外拷贝的过程中也容易乱,比较低端,最后拷贝完之后还得重启集群不是很灵活;今天我主要说的就是第二种方式,通过scroll的方式进行处理。
处理的时候需要的参数,分别为:源索引,源集群名称,源ip,目的索引,目的集群名称,目的ip,索引类型;通过构建一个源settings,一个目的settings去处理。
具体参见下面的代码(此代码适用于2.x到2.x版本,如果有其他的版本,只需要修改下es相关的类名称即可适用,如果有改变的话)
另外通过测试,效率也还可以,一个小时大概能导出5千万左右的数据,如果数据量不大,还会更快
行了不废话了,直接上代码:
import java.net.InetSocketAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.search.SearchHit;
/**
* java -cp "/root/es/lib/*"