Lucene.NET - 无法使用IndexWriter删除文档

时间:2011-05-12 17:02:27

标签: c# asp.net indexing lucene lucene.net

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

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

对于特定文件,我打电话:

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

最后,我正在调用通常的writer.Optimize(),writer.Commit()和writer.Close()。

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

但是,通过这些设置,我似乎无法删除这些文档。目标是删除,然后添加更新的版本,所以我得到相同文档的重复。如果需要,我可以提供更多代码/解释。有任何想法吗?感谢。

2 个答案:

答案 0 :(得分:7)

必须对该字段编制索引。如果某个字段未编入索引,则其字词不会显示在枚举中。

答案 1 :(得分:4)

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

听起来好像传递给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是正确的,你需要确保该字段已编入索引,否则你的术语查询将不会返回任何内容。