0

我正在开发一个带有 ASP.net MVC3 电子商务项目的 Solr 3.6。

我有一个 appx 的索引。Solr 中的 1 个 lac 产品。需求有一些变化,我们需要重建整个索引。整个索引需要将近 1 个半小时,在此期间站点需要关闭。

我怎样才能重建索引并让站点保持活动状态,该站点提供旧索引中的内容。在重建整个索引时减少停机时间的最佳做法是什么。我希望我能做到 100% 的正常运行时间。

编辑 我将几个 URL 作为存储字段存储到 Solr 数据中,因此,它们是在将数据添加到 Solr 时动态生成的。如果我在 test.example.com 等不同的子域上部署应用程序,那么它会采用错误的 URL,其中它只能与 example.com 一起使用。所以托管另一个应用程序对我来说不是一个选择。

4

2 回答 2

6

您可以利用 Solr 中的多个核心的概念,从而拥有用户当前正在搜索的活动核心和一个备用核心,您可以在其中进行架构更改、重新索引等。然后使用SWAP命令,您可以切换实时和备用核心,无需任何用户停机。交换将由 Solr 内部处理,您的用户永远不会注意到差异。

于 2012-08-13T11:40:23.347 回答
1

如我所见,有几种方法可以正确解决此问题:

  1. 不要重建整个索引 - 只需在必要的记录发生变化时即时更新它们,Solr 可以很简单地做到这一点
  2. 在不同的端口上创建 2 个 Solr 实例,并一个接一个地使用它们。第一次重建时,第二次你可以使用旧索引。并且当第一个被重建时,您可以使用它直到第二个实例上的索引被重建。
  3. 将布尔字段添加到名为“old_index”的索引中。当重新索引开始时,更新所有当前记录并设置 old_index=1,然后在配置中的某处写入您查找 old_index==1 的记录。比开始重新索引,比删除旧记录。它可以通过 Solr 的 deleteByQuery 以及 Solr 4.x 中的原子更新或手动更新来完成。
于 2012-08-13T11:07:07.330 回答