【问题标题】:Amount of Free Disk Space Required For Lucene IndexWriter.ExpungeDeletes()Lucene IndexWriter.ExpungeDeletes() 所需的可用磁盘空间量
【发布时间】:2012-02-01 20:35:49
【问题描述】:

我正在编写一个使用 Lucene 索引的应用程序,其中用户必须经常更新或删除索引文档。

我知道,如果有人想要从 Lucene 索引中永久删除标记为删除的文档,那么他有两个选择:

  1. Indexwriter.Optimize() 或

  2. Indexwriter.ExpungeDeletes()

由于为每个删除会话优化索引既昂贵又耗时,并且需要 2X 可用磁盘空间,因此在磁盘空间不足的情况下,Optimize() 似乎没有是个不错的选择。

所以很明显我必须选择 ExpungeDeletes(),它声称耗时更少,而且它不会强制合并所有段,所以希望它不需要 2 倍的可用空间。

但此操作仍然需要一些可用磁盘空间才能成功合并特定段。

所以我的问题是:

ExpungeDeletes() 需要多少可用磁盘才能成功完成其任务?

我问这个问题是因为我已经用一些已经优化并合并到一个段中的索引对其进行了测试......我发现 expungedeletes() 在这种情况下只有在可用磁盘空间位于时才会成功至少与 index 大小相同,否则抛出异常:MergePolicy-MergeException

另外,有什么办法可以防止在上述情况下引发此异常?

提前致谢。

【问题讨论】:

    标签: lucene


    【解决方案1】:

    您可能对 JIRA 问题 3577 感兴趣。总结一下:expungeDeletes 是一个糟糕的名字,因为它不仅删除了删除项,而且不理会索引的其余部分。

    如果您想知道它的确切性能:expungeDeltes 只需对每个已删除的段调用合并。在您的情况下,这听起来可能是每个部分......大致相当于调用optimize

    您认为需要优化的搜索不起作用怎么办?

    【讨论】:

      猜你喜欢
      • 2016-12-17
      • 1970-01-01
      • 2019-12-12
      • 2019-06-10
      • 2013-12-05
      • 2010-11-26
      • 2011-02-19
      • 1970-01-01
      • 2012-11-15
      相关资源
      最近更新 更多