我需要从Lucene索引中删除文档,然后才能重新添加它们。似乎如果我将文档标记为已删除,然后再尝试添加它...文档仍然被删除。如何“取消删除”文件?
这就是我将文档标记为“已删除”的方式:
Term = new Tearm("id", Id.Value);
IndexSearcher.reader.DeleteDocuments(term);
IndexSearcher.reader.Close();
所以,如果我想再次“激活”这份文件......我该怎么做?
谢谢!
答案 0 :(得分:1)
我不熟悉Lucene.Net,但Java版本有IndexReader.undeleteAll()
方法。
Lucene的删除是软删除。这意味着,删除文档时,会将其标记为删除。仅在优化索引时,才会从索引中清除已删除的文档。文档列表保存在索引目录的.del文件中。 undeleteAll()
方法清除文件的内容以使这些文档再次处于活动状态。 (不要尝试手动删除此文件,因为此文件的引用保留在索引段文件中。)
您无法取消删除文档的子集。你必须取消删除所有文件。您可以通过获取所有已删除文档的列表来模拟所需的功能,调用undeleteAll()
,然后再次删除除了您要保留的文档之外的文档。
答案 1 :(得分:1)
我认为您最好不要删除文档,但可以添加一个字段以将其标记为已删除并从查询中过滤该字段。除非有人要求形成已删除的文档,否则您可以轻松地显示它们。