【问题标题】:Is it possible to re-generate Lucene index in background?是否可以在后台重新生成 Lucene 索引?
【发布时间】:2010-09-07 11:17:28
【问题描述】:

有时需要重新生成一个 lucene 索引,例如当 Compass 映射或应用增强的方式发生变化时,或者由于某种原因而发生损坏时。

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

是否有任何标准方法可以让 lucene 在后台生成索引?例如。将索引写入临时目录并(当索引完成无例外等)用新索引替换现有索引?

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

最好的问候 + 感谢您的意见,

彼得 :)

【问题讨论】:

    标签: indexing lucene compass-lucene


    【解决方案1】:

    我也有类似的经历;分析仪的某些参数会不时更改;显然,如果是这种情况,则需要重建整个索引。 (我就不详述了,我有同样的要求就够了!)

    我按照你在问题中的建议做了。共有三个目录,“旧”、“当前”和“新”。来自实时站点的查询总是与“当前”背道而驰。索引创建过程是:

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

    分析当进程崩溃时会发生什么 - 如果它在第一步中崩溃,下一次它将继续进行。如果它在第二步中崩溃,那么“新”目录将在下次运行时被删除。第三步非常快 - 重命名目录既快速又原子。第 4 步崩溃没关系,下次运行就会清理干净。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我们也有类似的问题。我们的数据在 Lucene 中被索引,但原始来源是 DB 和 content repo。

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

        【讨论】:

          猜你喜欢
          • 2020-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多