2009-09-01 4 views
2

Javaでlucene 2.4の文書を削除したい。私のコードは、あなたがIndexWriterを使用してインデックスを最適化するまで変更されませんlucene 2.4の「文書を削除する」が機能しないのはなぜですか?

Directory directory = FSDirectory.getDirectory("c:/index"); 
    IndexReader indexReader = IndexReader.open(directory); 
    System.out.println("num="+indexReader.maxDoc()); 
    indexReader.deleteDocuments(new Term("name","1")); 
    System.out.println("num="+indexReader.maxDoc()); 

output 
     num=1 
     num=1  

答えて

5

私の意見では、文書を削除するIndexwriterを使用するのが最善であります;あなたが検索のために同じ参照を使用しない限り。

Lucene wiki状態

一般的にはすぐに削除を反映してか、

あなたは文書番号

で削除する必要があります

ない限り、あなたは に検索を必要とする、削除のためにIndexWriter を使用することをお勧めします

が削除された文書の数を知っておく必要がありますテッドは、与えられた deleteDocuments呼び出しのため

私はあなたの質問に対する答えは

でその優れたアプローチはIndexwriter

を使用するので、あなたはメモリに文書のmaxdoc値が欲しい見ることができますIndexreaderオブジェクトを閉じるか、削除のためにIndexwriterを使用する必要があります

+0

大変ありがとうございます – Sunil

+1

同じ問題に直面しました。私はindexWriterを使用して、コミットを呼び出し、削除後に閉じる。変更はメモリとディスクに反映されません。更新は正常に動作します – user12384512

3

maxDoc()です。少なくとも、あなたはcommit()にする必要があります、またはあなたの削除がディスクにすることさえできないかもしれません。

ただし、numDocs()は、コミットまたは最適化前でも削除されていないドキュメントの数を返す必要があります。

IndexWriterを使用してドキュメントを追加および削除し、IndexReaderを読み取り専用で開くことをお勧めします。 3.0はデフォルトで読み取り専用で開きます。 Indexreader が削除をバッファしclose()がオンに呼び出されるまで、インデックスに変更を書き込みませんので、

関連する問題