7

Luceneを使用している私のインデクサーは、サイズが約16GBのインデックスファイルを書き込んだ後、インデックス作成操作中にクラッシュするようです。

コンソールに書き込まれたスタックトレースは、私にはわからない理由で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()

生成されたログをLukeのJavaエディションで開くと、インデックスが削除されます(おそらく、破損しているため、「write.lock」ファイルが残ります)。ただし、これはLukeのバグまたは設定ミスである可能性があります。

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

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

Lucene.net 2.9.2を使用しているのは、これが.NET3.5用に構築された最後のバージョンだからです。

4

3 に答える 3

4

これは、を呼び出さずにインデックスに書き込みすぎたことが原因であることに気付きましたCommitCommit約10MBのデータを書き込んだ後に呼び出すようにコードを変更しました。それ以来、例外はありませんでした。クラッシュした場合は、36GBのインデックス全体を再構築する必要はなく、最後の10MBだけを再構築する必要があります。

于 2013-02-14T18:47:57.570 に答える
1

見つけるのにしばらく時間がかかりましたが、これは(私の場合)ローカルハードディスクがいっぱいであることが原因であることが判明しました。もっと便利な例外メッセージが役に立ちました。

于 2013-06-25T17:20:49.537 に答える
0

そうです、パーティーに非常に遅れましたが、私はこの例外の一部として同じ問題を抱えていました:

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()

すべてのインデックスを削除して再構築することで、これを解決しました。

于 2018-03-14T09:25:46.230 に答える