2012-08-22 11 views
7

Luceneを使用している私のインデクサは、約16GBのインデックスファイルを作成した後、インデックス作成中にクラッシュするようです。Lucene.net - インデックス作成中にクラッシュする

コンソールに書き込まれたスタックトレースは、わからない理由で3回繰り返されます。簡潔にするために、私は繰り返した部分だけを提供しました。ここでの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() 

は、「write.lock」ファイルが残っているが、たとえば、これはLukeのバグや誤った設定かもしれませんが。

このインデックスの作成には約36時間かかりますが、3回目にもう一度やり直す必要はありません(これは初めてのことではありません)。

何が原因なのかわかりません。私に何ができる?

私はLucene.net 2.9.2を使用しています。これは.NET 3.5用にビルドされた最後のバージョンだからです。

+0

ローカルドライブにインデックスを作成していますか? –

+0

はい、ローカルドライブです。インデックスファイルを使用するプロセスは他にありません。インデクシングプログラムにはIndexWriterインスタンスが1つあります。 – Dai

+0

これはlucene javaで考えられる理由は、ファイルハンドルが不足していることです。Lucene.net thoには当てはまりません –

答えて

3

これは、Commitを呼び出さずにインデックスにあまりに多くの情報を書き込むことによって発生したことに気付きました。約10MBのデータを書き込んだ後、コードをCommitに変更しました。それ以来、私は例外を抱えていませんでした。クラッシュしたときは、最後の10MBという36GBのインデックス全体を再構築する必要はありません。

1

これは検索に時間がかかりましたが、これは(私の場合は)ローカルハードディスクがいっぱいであることが原因であることが判明しました。より有用な例外メッセージが役に立ちました。

関連する問題