如何通过SolrJ客户端执行远程Solr核心备份?

时间:2012-12-19 07:40:10

标签: solr backup solrj

我想编写一个基于SolrJ的java客户端,它将整个核心数据从远程Solr服务器提取到一个文件中。稍后我想将此文件重播到另一个远程Solr服务器核心。

实现此功能的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

不幸的是,solr和solrj中没有这样的功能。

但是如果你的索引中有所有字段存储,你就可以读出所有文档并按照你想要的方式存储它们。

答案 1 :(得分:1)

检查它是否适用于您的情况:

Backup - 您可以执行备份,但只会在服务器上创建备份。

  

如果在主服务器中有提交的索引数据,则在主服务器上创建备份   服务器,否则什么也不做。这对定期备份非常有用。

您可以使用Solr replication将索引内容复制到任何远程Solr服务器。

因此,您可以将索引复制到本地框,然后再将其复制到远程框或备份,然后将内容传输到远程框。

答案 2 :(得分:1)

最新的Solr版本现在可以实现。

要在一台Solr Server上实现备份并在另一台Solr Server上进行还原,需要执行以下操作:

  1. 对于solr.xml中的每个Solr安装,请设置备份存储库以指向某个共享驱动器。例如,一个人可以使用HDFS(此配置要求将-Dsolr.hdfs.home=...添加到启动脚本中):
<solr>
...
<backup>
    <repository name="hdfs-repo" class="org.apache.solr.core.backup.repository.HdfsBackupRepository" default="false">
      <str name="location">${solr.hdfs.home}/backup</str>
      <str name="solr.hdfs.home">${solr.hdfs.home:}</str>
      <str name="solr.hdfs.confdir">${solr.hdfs.confdir:}</str>
    </repository>
</backup>
</solr>
  1. 从一台服务器创建备份:
SolrClient client1 = ...;
CollectionAdminRequest.Backup request1 = new CollectionAdminRequest.Backup(oldCollectionName, backupName);
request1.setRepositoryName("hdfs-repo");
request1.process(client1);
  1. 然后从另一台服务器上的备份还原:
SolrClient client2 = ...;
CollectionAdminRequest.Restore request2 = new CollectionAdminRequest.Restore(newCollectionName, backupName);
request2.setRepositoryName("hdfs-repo");
request2.process(client2);

此示例可用于Solr 7.5,但看起来该功能已在6.6中提供(请参见Backup/Restore in 6.6)。