Indexing 是否可以在后台重新生成Lucene索引?

Indexing 是否可以在后台重新生成Lucene索引?,indexing,lucene,compass-lucene,Indexing,Lucene,Compass Lucene,有时需要重新生成lucene索引,例如,当指南针映射或助推器应用方式发生变化时,或者由于任何原因发生损坏时 在我的例子中,生成索引大约需要5到6个小时,在此之前清除索引会导致此时间间隔内的数据不完整。即。此时执行搜索将返回不完整的结果 有没有标准的方法让lucene在后台生成索引?例如,将索引写入临时目录,并(在索引完成时,无异常等)用新索引替换现有索引 当然,可以“手动”实现这一点,但必须这样做吗?听起来像是一个常见的用例 最好的问候+谢谢你的意见 彼得:)我认为通常的方法是使用solr的复制

有时需要重新生成lucene索引,例如,当指南针映射或助推器应用方式发生变化时,或者由于任何原因发生损坏时

在我的例子中,生成索引大约需要5到6个小时,在此之前清除索引会导致此时间间隔内的数据不完整。即。此时执行搜索将返回不完整的结果

有没有标准的方法让lucene在后台生成索引?例如,将索引写入临时目录,并(在索引完成时,无异常等)用新索引替换现有索引

当然,可以“手动”实现这一点,但必须这样做吗?听起来像是一个常见的用例

最好的问候+谢谢你的意见


彼得:)

我认为通常的方法是使用solr的复制功能。但在您的情况下,主设备和从设备将位于同一台机器上,但只是指向不同的目录。

我有过类似的经历;分析仪的某些参数会不时改变;显然,如果是这样,整个索引需要重建。(我不想详细说明,我也有同样的要求!)

我按照你问题中的建议做了。有三个目录,“旧”、“当前”和“新”。来自现场的查询总是与“当前”相反。指数娱乐过程为:

  • 递归删除“旧”和“新”目录
  • 在“new”目录中创建新索引(在我的情况下,大约需要6小时)
  • 将“当前”重命名为“旧”;从“新”到“当前”
  • 递归删除“旧”目录
  • 分析流程崩溃时会发生什么——如果在第一步崩溃,下一次它将继续进行。如果它在第二步崩溃,那么“新”目录将在下一次运行时被删除。第三步非常快-重命名目录既快又原子。在第四步中崩溃并不重要,下一次跑步时它会被清理干净


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

    我们也有类似的问题。我们的数据用Lucene编制索引,但原始源是DB和content repo

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