是否可以取消删除Lucene.net索引中的文档?

时间:2011-10-07 19:40:10

标签: c# lucene lucene.net

我需要从Lucene索引中删除文档,然后才能重新添加它们。似乎如果我将文档标记为已删除,然后再尝试添加它...文档仍然被删除。如何“取消删除”文件?

这就是我将文档标记为“已删除”的方式:

    Term = new Tearm("id", Id.Value);
    IndexSearcher.reader.DeleteDocuments(term);
    IndexSearcher.reader.Close();

所以,如果我想再次“激活”这份文件......我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

我不熟悉Lucene.Net,但Java版本有IndexReader.undeleteAll()方法。

Lucene的删除是软删除。这意味着,删除文档时,会将其标记为删除。仅在优化索引时,才会从索引中清除已删除的文档。文档列表保存在索引目录的.del文件中。 undeleteAll()方法清除文件的内容以使这些文档再次处于活动状态。 (不要尝试手动删除此文件,因为此文件的引用保留在索引段文件中。)

您无法取消删除文档的子集。你必须取消删除所有文件。您可以通过获取所有已删除文档的列表来模拟所需的功能,调用undeleteAll(),然后再次删除除了您要保留的文档之外的文档。

答案 1 :(得分:1)

我认为您最好不要删除文档,但可以添加一个字段以将其标记为已删除并从查询中过滤该字段。除非有人要求形成已删除的文档,否则您可以轻松地显示它们。