У меня есть индекс, который в настоящее время занимает около 1 ГБ пространства и содержит около 2,5 миллионов документов.Индекс хранится на твердотельном диске для скорости.Я добавляю 2500 документов за раз и фиксирую после добавления каждого пакета.Индекс является «живым» и должен постоянно обновляться в течение дня и ночи, поэтому минимизация скорости записи очень важна.Я использую коэффициент слияния 10 и никогда не вызываю Optimize()
, скорее позволяя индексу оптимизироваться по мере необходимости на основе коэффициента слияния.
Мне нужно зафиксировать документы после добавления каждого пакетапотому что я записываю этот факт, чтобы в случае сбоя или перезапуска приложения оно могло начать с того места, где оно остановилось.Если бы я не зафиксировал, сохраненное состояние было бы несовместимо с тем, что находится в индексе.Я предполагаю, что мои добавления, удаления и обновления будут потеряны, если писатель будет уничтожен без фиксации.
Во всяком случае, я заметил это после произвольного периода времени, который может составлять от двух минут до двух часов.и какое-то переменное число предыдущих коммитов, похоже, что индексатор зависает в методе IndexWriter.AddDocument(doc)
, и я не могу понять, почему он останавливается или как его исправить.Блок может оставаться на месте более двух часов, что кажется странным для индекса, занимающего менее 2 ГБ в миллионах документов и имеющего SSD-накопитель для работы.
Что может привести к блокировке AddDocument?Существуют ли какие-либо диагностические утилиты Lucene, которые могут мне помочь?Что еще я могу найти, чтобы отследить проблему?