1
我有一個IndexReader
處於只讀模式,IndexSearcher
基於此讀取器和IndexWriter
處理相同的Lucene索引。我想從索引中刪除一個文檔。之後,我不希望文檔顯示在由IndexSearcher
返回的結果中(我想這就是刪除的意思)。下面是代碼:IndexWriter所做的更改沒有反映在IndexReader中
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);
但是,刪除的文件仍然作爲結果返回,直到一切都重新開始,即作者,讀者和搜索是重新實例化。此外,它不工作在這樣的查詢理清刪除的文檔:
if (_enIndexReader.IsDeleted(documentId)) continue;
,已刪除還是回到false
爲IndexReader.IsDeleted(Document)
的文件。
如何以最小的計算成本反映IndexWriter
在IndexSearcher
/IndexReader
中所做的更改?在刪除之後重塑所有內容不是一種選擇。
我使用Lucene.NET v4.0.30319。