索引过程中崩溃
使用Lucene的我的索引器在编写大小约为16GB的索引文件后似乎在索引操作期间崩溃。
由于我不知道的原因,写入控制台的堆栈跟踪重复三次。 为了简洁起见,我只提供了重复的单个部分。 以下是由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()
当我使用Luke的Java版本打开生成的日志时,索引被删除(可能是因为它已损坏,例如“write.lock”文件仍然存在),尽管这可能是Luke的错误或配置错误。
创建这个索引大约需要36个小时,而且我不想第三次再次这样做(这不是第一次发生)。
我不知道是什么原因造成的。 我能做什么?
我使用Lucene.net 2.9.2,因为它是为.NET 3.5构建的最后一个版本。
我意识到这是由于在没有调用Commit
情况下写入索引太多所致。 写了大约10MB的数据后,我修改了我的代码以调用Commit
。 我没有例外,因为 - 当它崩溃时,意味着我不需要重建整个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()
我通过删除所有索引并重建它们来解决这个问题。
链接地址: http://www.djcxy.com/p/62831.html下一篇: Changing the location of the index.html file in Doxygen output