2011-10-07 5 views
4

私はLuceneインデックスから文書を削除し、後でそれらを再度追加する必要があります。ドキュメントを削除済みとしてマークし、それをもう一度追加しようとすると、ドキュメントが削除されたままになっているようです。どのようにして文書を元に戻すことができますか?Lucene.netの索引で文書の削除を取り消すことはできますか?

これは、私が「削除」として文書をマークしています方法です:

Term = new Tearm("id", Id.Value); 
    IndexSearcher.reader.DeleteDocuments(term); 
    IndexSearcher.reader.Close(); 

だから私は再びこの文書を「活性化」したい場合..私はそれを行うだろうか?

ありがとうございます!

+0

Lucene.Netの非常に古いバージョンを使用しているようです(最近、人々はIndexWriterのDeleteメソッドを使用しています)どのバージョンを使用していますか? –

+0

バージョン2.0.0.4を使用しています。私は、IndexWriterにDeleteメソッドがあることに気付かなかった。削除すると本当に文書が削除されるのか、それとも削除されたとマークするだけですか? – Nick

+0

A)いいえ、2.0.0.4のIndexWriterにはDeleteメソッドがありません。私が正しく思い出すと、それは2.3.1で導入されました。 B) 'それとも、削除されたことだけをマークするのですか?これはすべての(AFAIK)DB、検索エンジンが動作する方法です。私は、2.9.2または2.9.4にアップグレードした後、あなたの質問を再確認する方が良いと思う。 –

答えて

1

私はLucene.Netに慣れていませんが、JavaバージョンにはIndexReader.undeleteAll()メソッドがあります。

Luceneの欠失はソフト欠失である。つまり、文書が削除されると、削除のマークが付けられます。索引が最適化されている場合のみ、削除された文書は索引から削除されます。ドキュメントのリストは、indexディレクトリの.delファイルで管理されます。 undeleteAll()メソッドは、ファイルの内容をパージして、それらの文書を再度アクティブにします。 (このファイルへの参照はインデックスセグメントファイル内で維持されているため、このファイルを手動で削除しないでください)

文書のサブセットの元に戻すことはできません。すべての文書を元に戻す必要があります。削除したすべての文書のリストを取得し、undeleteAll()を呼び出して保存したい文書以外の文書を再度削除することによって、必要な機能をエミュレートできます。

+0

削除されたドキュメントのインデックスを照会することは可能ですか? – Nick

+0

インデックス内のすべてのドキュメントIDに対して反復処理を行い、削除されているかどうかを確認できます。ここにIndexReaderの関連するAPIがあります。 http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/index/IndexReader.html#isDeleted(int) –

1

ドキュメントを削除しないほうが良いと思われますが、フィールドを追加して削除済みとしてマークし、そのフィールドをクエリから除外して評価してください。誰かがフォームの削除された文書を尋ねない限り、簡単にそれらを表示することができます。

関連する問題