Я пишу приложение, которое использует индексы Lucene, где пользователь должен часто обновлять или удалять проиндексированные документы.
Я понимаю, что если кто-то хочет навсегда удалить документы, помеченные для удаления из индекса Lucene, у него есть два варианта:
Indexwriter.Optimize () ИЛИ
Indexwriter.ExpungeDeletes ()
Поскольку оптимизация индекса для каждого сеанса удаления стоит дорого и занимает много времени, а также требует 2X свободного дискового пространства , поэтому в ситуациях, когда дискового пространства не хватает, Optimize (), похоже, не хороший выбор.
Так что, очевидно, мне пришлось пойти на ExpungeDeletes (), который, как утверждается, требует меньше времени и не требует объединения всех сегментов, так что, надеюсь, он не требует 2х свободного пространства.
Но, тем не менее, эта операция требует некоторого свободного дискового пространства для успешного объединения определенных сегментов.
Итак, мой вопрос:
Сколько свободного диска требуется ExpungeDeletes () для успешного выполнения задачи?
Я задаю этот вопрос, потому что я проверил его с некоторыми индексами, которые уже были оптимизированы и объединены в один сегмент ... и я обнаружил, что expungedeletes () в этом случае преуспевает только тогда, когда свободное место на диске составляет по крайней мере тот же размер, что и индекс, иначе оно выдает исключение: MergePolicy-MergeException
Кроме того, можно ли как-нибудь предотвратить это исключение в вышеупомянутом случае?
Заранее спасибо.