Lucene.net-索引期间崩溃

Lucene.net-索引期间崩溃,lucene,lucene.net,luke,Lucene,Lucene.net,Luke,我的索引器,使用Lucene,在写了一个大约16GB大小的索引文件之后,在索引操作期间似乎崩溃了 写入控制台的堆栈跟踪会重复三次,原因我不知道。为了简洁起见,我只提供了重复的单个部分。以下是Lucene写入conolse的堆栈跟踪: Lucene.Net.Index.MergePolicy+MergeException: Exception of type 'Lucene.Net.Index.MergePolicy+MergeException' was thrown. ---> Sys

我的索引器,使用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构建的最后一个版本。

我意识到这是由于在没有调用
提交的情况下向索引写入太多内容造成的。在写入了大约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()

我通过删除所有索引并重建它们来解决这个问题。

您是否正在为本地驱动器编制索引?是的,它是本地驱动器。也没有其他进程使用索引文件,而且我的索引程序只有一个IndexWriter实例。在lucene java中出现这种情况的一个可能原因是文件句柄不足,我不确定它是否适用于lucene.net tho