IndexWriter 所做的更改不会被 IndexReader 反映
Changes made by an IndexWriter are not reflected by an IndexReader
我有一个处于只读模式的 IndexReader
,一个基于此 reader 的 IndexSearcher
和一个在同一个 Lucene 索引上工作的 IndexWriter
。我想从索引中删除一个文档。之后,我不希望文档出现在 IndexSearcher
编辑的结果中 return(我想这就是删除的意义所在)。这是代码:
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);
但是,删除的文档仍然return作为结果编辑,直到一切都重新启动,即 writer、reader 和 searcher 被重新实例化。此外,像这样在查询中整理已删除的文档也不起作用:
if (_enIndexReader.IsDeleted(documentId)) continue;
被删除的文档还有return false
for IndexReader.IsDeleted(Document)
.
如何以最小的计算成本在 IndexSearcher
/IndexReader
中反映 IndexWriter
所做的更改?删除后重新实例化所有内容不是一种选择。
我使用 Lucene.NET v4.0.30319.
知道了。 IndexReader.Reopen()
returns 调用方法的 reader 的重新打开的实例,同时保持原样。因此,代码需要这样修改:
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader = _enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);
我有一个处于只读模式的 IndexReader
,一个基于此 reader 的 IndexSearcher
和一个在同一个 Lucene 索引上工作的 IndexWriter
。我想从索引中删除一个文档。之后,我不希望文档出现在 IndexSearcher
编辑的结果中 return(我想这就是删除的意义所在)。这是代码:
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);
但是,删除的文档仍然return作为结果编辑,直到一切都重新启动,即 writer、reader 和 searcher 被重新实例化。此外,像这样在查询中整理已删除的文档也不起作用:
if (_enIndexReader.IsDeleted(documentId)) continue;
被删除的文档还有return false
for IndexReader.IsDeleted(Document)
.
如何以最小的计算成本在 IndexSearcher
/IndexReader
中反映 IndexWriter
所做的更改?删除后重新实例化所有内容不是一种选择。
我使用 Lucene.NET v4.0.30319.
知道了。 IndexReader.Reopen()
returns 调用方法的 reader 的重新打开的实例,同时保持原样。因此,代码需要这样修改:
_enIndexWriter.DeleteDocuments(query);
_enIndexWriter.Commit();
_enIndexReader = _enIndexReader.Reopen();
_enIndexSearcher = new IndexSearcher(_enIndexReader);