2009-05-11 6 views
2

IndexWriterAddDocument()を呼び出す前に、私はIndexReader IsLockedを使用してロックを解除する方法

IndexReader.IsLocked(myDirectory) 

を呼び出し、それがtrueを返した場合、その後、

IndexReader.Unlock(myDirectory) 

すなわち

if(IndexReader.IsLocked(myDirectory)) 
{ 
IndexReader.Unlock(myDirectory); 
} 

writer = new IndexWriter(myDirectory, _analyzer, true); 
writer.AddDocument(doc); 
を呼び出し、それが大丈夫ならばです

私は "ロック取得タイムアウト"を取得し続けます。私のコードのエラー。 このエラーを解決するには、大丈夫ならこの方法をお勧めします。

答えて

3

「ロック取得タイムアウト」エラーを取得することは、インデックスを処理する方法に何か問題があることを示す警告マークです。索引への書き込みがIndexWriter以上ある場合、強制的にロックを解除すると、索引が破損する可能性があります。

しかし、私の経験では、コードを操作しているときにエラーが発生するのは簡単です。プロセスが何も書き込まれていなくても、時々クラッシュしたりデバッグセッションが中断したりすることがあります。

この場合、プロセスの開始時にインデックスをロック解除しても問題ありません。 addDocumentを呼び出す前に毎回呼び出さず、IndexWriterを作成するときに1度だけ呼び出します。

いずれにしても、プロセスを終了する前にすべてのIndexWriterを適切に終了してください。

+0

感謝を書き込みません持つことができます...のLuceneに初心者です...ちょうど同時ユーザーが同時にLuceneインデックスを更新できるWebアプリケーションを通じてLucene検索APIを公開しているときに、私が世話をする必要があることを知りたがっています。 –

0

Luceneで覚えておくべき重要な点は、インデックスを更新するスレッドが1つだけなので... Webサイトには同時ユーザーが存在しますが、1人のユーザーのみが更新する必要があります。

あなたが正しくそれを処理しない場合は、あなたが問題に実行されます...あなたは複数の/クエリを読み取りますが、ウル貴重な入力のための

+0

urのコメントに感謝します。これも見てください。 http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests –

関連する問題