Lucene.net -сбои во время индексации

мой индексатор, используя Lucene, кажется, сбой во время операций индексирования после записи индексного файла размером примерно 16 ГБ.

трассировка стека, записанная на консоль, повторяется три раза по причинам, которые я не знаю. Для краткости я привел только одну часть, которая повторяется. Вот трассировка стека, как написано в conolse Lucene:

Lucene.Net.Index.MergePolicy+MergeException: Exception of type 'Lucene.Net.Index.MergePolicy+MergeException' was thrown. --->

System.IO.FileNotFoundException: Could not find file 'PATH_TO_MY_INDEX_DIRECTORY_xx.cfs'.

File name: 'PATH_TO_MY_INDEX_DIRECTORY_xx.cfs'
at Lucene.Net.Index.IndexWriter.HandleMergeException(Exception t, OneMerge merge)
at Lucene.Net.Index.IndexWriter.Merge(OneMerge merge)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
--- End of inner exception stack trace ---
at Lucene.Net.Index.ConcurrentMergeScheduler.HandleMergeException(Exception exc)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

когда я открываю сгенерированный журнал с выпуском Java Luke, индекс удаляется (предположительно, потому что это коррумпированный, "write.файл блокировки" остается, например), хотя это может быть ошибкой или неправильной настройки лука.

создание этого индекса занимает около 36 часов, и я не хочу делать это снова в третий раз (это не первый раз, когда это произошло).

Я понятия не имею, что вызывает это. Что я могу сделать?

Я использую Lucene.net 2.9.2 потому что это последняя версия, которая была построена для .NET 3.5.

3 ответов


Я понял, что это было вызвано слишком много писать в индекс без вызова Commit. Я modiifed мой код для вызова Commit после записи около 10 МБ данных. С тех пор у меня не было исключения, и когда он падает, это означает, что мне не нужно перестраивать весь индекс 36GB, только последние 10MB.


потребовалось некоторое время, чтобы найти, но это оказалось (в моем случае) вызвано заполнением локального жесткого диска. Более полезное сообщение об ошибке было бы полезно.


правильно, очень поздно на вечеринку, но у меня была та же проблема в рамках этого исключения:

Exception Info: Lucene.Net.Index.CorruptIndexException
   at Lucene.Net.Index.IndexWriter.HandleMergeException(System.Exception, 
OneMerge)
   at Lucene.Net.Index.IndexWriter.Merge(OneMerge)
   at Lucene.Net.Index.ConcurrentMergeScheduler+MergeThread.Run()

Exception Info: Lucene.Net.Index.MergePolicy+MergeException
   at Lucene.Net.Index.ConcurrentMergeScheduler.HandleMergeException(System.Exception)

    at Lucene.Net.Index.ConcurrentMergeScheduler+MergeThread.Run()
    at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
    at System.Threading.ThreadHelper.ThreadStart()

Я решил это, удалив все индексы и перестроив их.