是否有可能在后台重新生成Lucene索引?

时间:2010-09-07 11:17:28

标签: indexing lucene compass-lucene

有时需要重新生成lucene索引,例如:当指南针映射中的某些内容发生变化时,或者应用了增强的方式,或者出于某种原因某些内容已经损坏。

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

是否有任何标准方法让lucene在后台生成索引?例如。将索引写入临时目录并且(当索引完成时没有异常等)将现有索引替换为新索引?

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

致以最诚挚的问候+感谢您的意见,

彼得:)

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我有类似的经历;分析仪有一些参数会不时变化;很明显,如果是这种情况,整个索引需要重建。 (我不会详细说明,足以说我有同样的要求!)

我做了你在问题中建议的内容。有三个目录,“旧”,“当前”和“新”。来自实时网站的查询总是与“当前”相反。索引重新创建过程是:

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

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

答案 2 :(得分:0)

我们遇到了类似的问题。我们的数据在Lucene中编入索引,但最初的来源是数据库和内容存储库。

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