Lucene.net - 索引期间崩溃

Dai*_*Dai 7 lucene lucene.net luke

在使用大约16GB的索引文件写入索引文件之后,使用Lucene的索引器似乎在索引操作期间崩溃.

写入控制台的堆栈跟踪重复三次,原因我不知道.为简洁起见,我只提供了重复的单个部分.这是Lucene写给conolse的堆栈跟踪:

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()
Run Code Online (Sandbox Code Playgroud)

当我用Luke的Java版本打开生成的日志时,索引被删除(可能是因为它已损坏,例如"write.lock"文件仍然存在),尽管这可能是Luke的错误或错误配置.

创建这个索引大约需要36个小时,而且我不想第三次再次这样做(这不是第一次发生).

我不知道是什么造成了这个.我能做什么?

我正在使用Lucene.net 2.9.2,因为它是为.NET 3.5构建的最后一个版本.

Dai*_*Dai 4

我意识到这是由于在没有调用的情况下向索引写入了太多内容造成的Commit。我修改了代码,以便Commit在写入大约 10MB 的数据后进行调用。从那以后我就再没有遇到过异常——当它崩溃时,这意味着我不需要重建整个 36GB 索引,只需重建最后 10MB 即可。