Lucene.NET - 无法使用索引编写器删除文档

本文关键字:删除 文档 索引 NET Lucene | 更新日期: 2023-09-27 17:56:10

我正在接管一个项目,所以我仍在学习这个。该项目使用 Lucence.NET。我也不知道这个功能是否正确。无论如何,我正在实例化:

var writer = new IndexWriter(directory, analyzer, false);

对于特定文档,我致电:

writer.DeleteDocuments(new Term(...));

最后,我打电话给通常的作家。优化(),编写器。提交(),和编写器。关闭()。

Term 对象中的字段是一个 Guid,转换为字符串 (.ToString("D")),并使用 Field.Store.YES 和 Field.Index.NO 存储在文档中。

但是,使用这些设置,我似乎无法删除这些文档。目标是删除,然后添加更新的版本,所以我得到了同一文档的副本。如果需要,我可以提供更多代码/解释。有什么想法吗?谢谢。

Lucene.NET - 无法使用索引编写器删除文档

必须为该字段编制索引。如果字段未编制索引,则其术语将不会显示在枚举中。

我认为你处理作者的方式没有任何问题。

听起来好像您传递给 DeleteDocuments 的术语没有返回任何文档。您是否尝试使用相同的术语进行查询以查看它是否返回任何结果?

此外,如果您的目标是简单地重新创建文档,则可以调用 UpdateDocument:

//     Updates a document by first deleting the document(s) containing term and
//     then adding the new document. The delete and then add are atomic as seen
//     by a reader on the same index (flush may happen only after the add).  NOTE:
//     if this method hits an OutOfMemoryError you should immediately close the
//     writer. See above for details.

您可能还想查看SimpleLucene(http://simplelucene.codeplex.com) - 它使执行基本的Lucene任务变得更加容易。

[更新]不确定我是如何错过的,但@Shashikant Kore 是正确的,您需要确保该字段已编入索引,否则您的术语查询将不会返回任何内容。