Я использую lucene. net 2.9.2 для запуска оптимизации на индексных файлах. Данные индекса составляют почти 200 ГБ. Слияние работает нормально, пока количество сегментов не станет равным 2 (один с размером ~ 121 ГБ, а другой размером ~ 90 ГБ). При объединении этих двух в один сегмент возникает следующее исключение. Это как-то связано с ограничением индекса? Пожалуйста, сообщите.
FATAL: Failed to optimize index, System.IO.IOException: background merge hit exception: _zw4d:c7277262 _10xeb:c5445195 into _10xed [optimize] [mergeDocStores] ---> System.ArgumentException: Doc num 4313 ---> System.ArgumentOutOfRangeException: Number was less than the array's lower bound in the first dimension.
Parameter name: dstIndex
at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len)
at Lucene.Net.Index.TermVectorsReader.ReadTermVector(String field, Int64 tvfPointer, TermVectorMapper mapper)
at Lucene.Net.Index.TermVectorsReader.ReadTermVectors(Int32 docNum, String[] fields, Int64[] tvfPointers)
--- End of inner exception stack trace ---
at Lucene.Net.Index.IndexWriter.HandleMergeException(Exception t, OneMerge merge)
at Lucene.Net.Index.IndexWriter.Merge(OneMerge merge)
at Lucene.Net.Index.ConcurrentMergeScheduler.DoMerge(OneMerge merge)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
--- End of inner exception stack trace ---
at Lucene.Net.Index.IndexWriter.Optimize(Int32 maxNumSegments, Boolean doWait)
at optimizeIndex.Program.optimizeLuceneIndex() in c:\optimizeIndex\optimizeIndex\Program.cs:line
Я прошел по ссылке ниже https://lucene.apache.org/core/3_6_1/fileformats.html, но не уверен, что проблема в количестве документов или размере сегмента.