【发布时间】:2012-02-01 20:35:49
【问题描述】:
我正在编写一个使用 Lucene 索引的应用程序,其中用户必须经常更新或删除索引文档。
我知道,如果有人想要从 Lucene 索引中永久删除标记为删除的文档,那么他有两个选择:
Indexwriter.Optimize() 或
Indexwriter.ExpungeDeletes()
由于为每个删除会话优化索引既昂贵又耗时,并且需要 2X 可用磁盘空间,因此在磁盘空间不足的情况下,Optimize() 似乎没有是个不错的选择。
所以很明显我必须选择 ExpungeDeletes(),它声称耗时更少,而且它不会强制合并所有段,所以希望它不需要 2 倍的可用空间。
但此操作仍然需要一些可用磁盘空间才能成功合并特定段。
所以我的问题是:
ExpungeDeletes() 需要多少可用磁盘才能成功完成其任务?
我问这个问题是因为我已经用一些已经优化并合并到一个段中的索引对其进行了测试......我发现 expungedeletes() 在这种情况下只有在可用磁盘空间位于时才会成功至少与 index 大小相同,否则抛出异常:MergePolicy-MergeException
另外,有什么办法可以防止在上述情况下引发此异常?
提前致谢。
【问题讨论】:
标签: lucene