solr下可以通过mergeindexes命令完成一个或多个core到其他core的索引合并,合并索引需要保证要被合并到的core的schema要与其他来源core的schema兼容,否则就会出现无法启动core的问题,我们可以通过代码CoreAdminRequest.MergeIndexes类实现,实例代码如下:
代码语言:javascript复制 try(SolrClient client = new HttpSolrClient.Builder(urlString).build();
SolrClient solr = new HttpSolrClient.Builder(urlString "/bank4").build()){
CoreAdminRequest.MergeIndexes mergeIndex = new CoreAdminRequest.MergeIndexes();
mergeIndex.setCoreName("bank4");
mergeIndex.setSrcCores(Arrays.asList("bank","bank3"));
NamedList<Object> result = client.request(mergeIndex);
System.out.println(result);
solr.commit();
}catch(Exception ex){
ex.printStackTrace();
}
注意上面标红部分代码,为了使得合并后的索引可见,需要对target core执行commit或者reload操作!
也可以通过http请求的方式完成,这个方案有两种方式,一个是通过indexDir属性如下:
代码语言:javascript复制admin/cores?action=MERGEINDEXES&core=new-core-name&indexDir=
path/to/core1/data/index&indexDir=path/to/core2/data/index
使用这种方式有下面主要优缺点:
1.缺点1:可能存在index破坏的情况(合并索引时同步有其他更新target core索引的操作发生)
2.缺点2:合并的索引必须跟target core在一台机器上
3.优点:可以合并任何lucene索引数据
另一种方式就是通过srcCore,具体如下:
admin/cores?action=mergeindexes&core=new-core-name&srcCore=core1-name&srcCore=core2-name 该方案的优缺点如下:
1.优点:避免合并后的索引出现被破坏的问题
2.缺点:只能使用solr core的索引文件