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 存储在文档中。
但是,使用这些设置,我似乎无法删除这些文档。目标是删除,然后添加更新的版本,所以我得到了同一文档的副本。如果需要,我可以提供更多代码/解释。有什么想法吗?谢谢。
必须为该字段编制索引。如果字段未编制索引,则其术语将不会显示在枚举中。
我认为你处理作者的方式没有任何问题。
听起来好像您传递给 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 是正确的,您需要确保该字段已编入索引,否则您的术语查询将不会返回任何内容。