solr合并索引

2022-03-28 19:46:43 浏览数 (1)

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的索引文件

0 人点赞