Lucene IndexWriter所做的更改不会反映在IndexReader中

Lucene IndexWriter所做的更改不会反映在IndexReader中,lucene,lucene.net,Lucene,Lucene.net,我有一个只读模式的IndexReader,一个基于该阅读器的indexsearch和一个IndexWriter在同一个Lucene索引上工作。我想从索引中删除一个文档。之后,我不希望文档显示在索引搜索器返回的结果中(我想这就是删除的意义所在)。代码如下: _enIndexWriter.DeleteDocuments(query); _enIndexWriter.Commit(); _enIndexReader.Reopen(); _enIndexSearcher = new IndexSearc

我有一个只读模式的
IndexReader
,一个基于该阅读器的
indexsearch
和一个
IndexWriter
在同一个Lucene索引上工作。我想从索引中删除一个文档。之后,我不希望文档显示在
索引搜索器返回的结果中(我想这就是删除的意义所在)。代码如下:

_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);
但是,删除的文档仍将作为结果返回,直到所有内容重新启动,即重新实例化writer、reader和searcher。此外,在查询中按如下方式对已删除文档进行排序也不起作用:

if (_enIndexReader.IsDeleted(documentId)) continue;
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader = _enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);
对于
IndexReader.IsDeleted(Document)
,已删除的文档仍然返回
false

如何以最小的计算成本反映
indexsearch
/
IndexReader
IndexWriter
所做的更改?删除后重新存储所有内容不是一个选项


我使用Lucene.NET v4.0.30319。明白了
IndexReader.Reopen()
返回调用该方法的读取器的重新打开实例,而该实例保持原样。因此,代码需要修改如下:

if (_enIndexReader.IsDeleted(documentId)) continue;
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader = _enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);