2010-09-07 31 views
0

有时需要重新生成lucene索引,例如,当Compass映射中的某些内容发生变化或应用提升方式时,或者出于某种原因而发生了某些内容损坏时。是否有可能在后台重新生成Lucene索引?

在我的情况下,索引的生成需要大约5到6个小时,清除索引之前导致数据不完整的时间间隔。 I. e。在这段时间内进行搜索会返回不完整的结果。

有没有什么标准的方法让lucene在后台生成索引?例如。写索引到一个临时目录和(当索引完成时没有异常等)用新的索引替换现有的索引?

当然,人们可以实现这个“手动”,但人们必须?听起来像是我常见的用例。

问候+感谢您的意见,

彼得:)

回答

0

我有过类似的经历;分析仪的某些参数会随时发生变化;显然如果是这样的话,整个索引需要重建。 (我不会详述,只要说我有同样的要求!)

我做了你在你的问题中提出的建议。有三个目录,“旧”,“当前”和“新”。来自现场的查询总是与“当前”相反。该指数再创造的过程是:

  1. 递归删除“旧”与“新”目录
  2. 创建新的索引,“新”目录(在我的情况下,大约需要6小时)
  3. 重命名“当前”到“老”;和“新”到“当前”
  4. 递归删除“旧”目录

的内容时会发生进程崩溃的分析 - 如果第1步骤崩溃,下一次会而已矣。如果它在第二步崩溃,那么“新”目录将在下次运行时被删除。第三步非常快 - 重命名一个目录是快速和原子的。在第四步中失败并不重要,它只会在下一次运行时被清理干净。

仔细观察者会注意到,在步骤3中,系统可能会在重命名当前目录和移动新目录之间崩溃。这种情况不太可能发生,因为目录重命名如此之快。该系统已投入生产几年,这从未发生过(但?)。

0

我认为通常的方式做到这一点是使用Solr的复制功能。在你的情况下,主从机将在同一台机器上,但只是指向不同的目录。

0

我们有类似的问题。我们的数据在Lucene中编入索引,但最初的数据源是数据库和内容回购。

因此,如果索引不同步(或数据类型更改等),我们只需遍历索引中的所有现有条目并重新生成数据,以便更新每个文档。这并不是一件复杂的事情。

相关问题