Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将完整数据集更新为solr之前,如何使solr对用户不可用?_Solr_Restore - Fatal编程技术网

在将完整数据集更新为solr之前,如何使solr对用户不可用?

在将完整数据集更新为solr之前,如何使solr对用户不可用?,solr,restore,Solr,Restore,我使用solr(独立模式)作为数据查找服务。应用程序将完整数据集更新为solr大约需要20分钟。我希望solr实例在更新完整数据集之前不可用 我可以想到的一种方法是使用另一个solr实例(B)更新完整的数据集,备份索引数据,然后将索引恢复到用户使用的solr实例(A)。然而,问题是要恢复索引,我需要启动solr(A),所以在solr(A)启动和solr(A)恢复完整索引之间仍然存在一些差距。有没有办法在启动solr实例之前恢复索引数据?不要查询正在更新的索引。您不需要多台服务器;您需要在两个集合

我使用solr(独立模式)作为数据查找服务。应用程序将完整数据集更新为solr大约需要20分钟。我希望solr实例在更新完整数据集之前不可用


我可以想到的一种方法是使用另一个solr实例(B)更新完整的数据集,备份索引数据,然后将索引恢复到用户使用的solr实例(A)。然而,问题是要恢复索引,我需要启动solr(A),所以在solr(A)启动和solr(A)恢复完整索引之间仍然存在一些差距。有没有办法在启动solr实例之前恢复索引数据?

不要查询正在更新的索引。您不需要多台服务器;您需要在两个集合之间切换

如果您使用的是云模式,那么您可以。您可以索引到
collection\u x
,然后在准备就绪时将
collection
别名更改为指向
collection\u x
。下次索引到
collection\u y
时,完成后将别名更改为指向
collection\u y
,然后根据需要删除旧集合(使用时间戳/日期而不是字符)

当您在独立模式下使用Solr时,据我所知,您没有可用的别名,但您可以执行核心交换。这允许您将所有内容索引到一个单独的核心,完成后,您只需交换两个核心的名称——之后传入的任何请求都将转到新的核心(现在已重命名)

如果您有
core
core\u索引
,则在完成索引时,可以调用
admin/cores?action=SWAP&core=core&other=core\u索引
。这是一个原子操作,所以两个核心都不会有任何停机时间


下次索引时,像往常一样索引到
core\u索引
——首先清理它,然后索引新内容,提交并再次调用
SWAP
,在中交换新内容。无需停机,无需黑客攻击,从复制的角度恢复索引(您可以通过重新加载并交换目录来解决此问题。但不要这样做,请使用现有的对此支持)。

不要查询正在更新的索引。您不需要多台服务器;您需要在两个集合之间切换

如果您使用的是云模式,那么您可以。您可以索引到
collection\u x
,然后在准备就绪时将
collection
别名更改为指向
collection\u x
。下次索引到
collection\u y
时,完成后将别名更改为指向
collection\u y
,然后根据需要删除旧集合(使用时间戳/日期而不是字符)

当您在独立模式下使用Solr时,据我所知,您没有可用的别名,但您可以执行核心交换。这允许您将所有内容索引到一个单独的核心,完成后,您只需交换两个核心的名称——之后传入的任何请求都将转到新的核心(现在已重命名)

如果您有
core
core\u索引
,则在完成索引时,可以调用
admin/cores?action=SWAP&core=core&other=core\u索引
。这是一个原子操作,所以两个核心都不会有任何停机时间


下次索引时,像往常一样索引到
core\u索引
——首先清理它,然后索引新内容,提交并再次调用
SWAP
,在中交换新内容。无需停机,无需黑客攻击,从复制的角度恢复索引(您可能可以通过重新加载并交换目录来解决这一问题。但不要这样做,请使用现有的对此支持)。

另一个选项可能是我们为应用程序所做的。 维护在数据库中创建的core列表,并向其中添加status列

如果尚未完成完整索引,则状态为脱机。索引完成后,将状态设置为“正在进行”

完成索引并使其可用于搜索后,将状态更改为可搜索


在这里,每个核心都可以维护自己的状态。

另一个选项可以是我们为应用程序所做的。 维护在数据库中创建的core列表,并向其中添加status列

如果尚未完成完整索引,则状态为脱机。索引完成后,将状态设置为“正在进行”

完成索引并使其可用于搜索后,将状态更改为可搜索


在这里,每个核心都可以保持其自身的状态。

谢谢您的回答。然而,这不是我想要的。我想要的是用户查询完整数据集,或者solr处于脱机状态。添加身份验证并在完成索引后禁用它。。或者使用一个随机的长核心名称,然后在该名称可用时重命名它。这将生成404-s,直到它实际可用。谢谢你的回答。然而,这不是我想要的。我想要的是用户查询完整数据集,或者solr处于脱机状态。添加身份验证并在完成索引后禁用它。。或者使用一个随机的长核心名称,然后在该名称可用时重命名它。这将生成404-s,直到它实际可用。