3

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

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

4

3 回答 3

2

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

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

于 2012-12-19T09:26:27.313 回答
1

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

备份- 您可以执行备份,但备份将仅在服务器上创建。

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

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

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

于 2012-12-19T10:15:52.763 回答
1

现在可以使用最新的 Solr 版本。

要在一台 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 中已经存在(请参阅 6.6 中的备份/恢复)。

于 2019-02-12T22:07:30.990 回答