无法删除lucene索引中的现有文档

时间:2012-07-02 00:32:08

标签: lucene.net lucene

我正在使用Lucene.Net(版本2.9.4.1)来实现一个简单的搜索模块。我正在尝试使用以下代码

删除索引中存在的文档
var analyzer = new StandardAnalyzer(Version.LUCENE_29);
var indexWriter = new IndexWriter(
    LuceneSearch._luceneDir,
    analyzer,
    IndexWriter.MaxFieldLength.UNLIMITED);            

var searchQuery = new TermQuery(new Term("ListID", listingDoc.Get("ListID")));

indexWriter.DeleteDocuments(searchQuery);

其中listingDoc的类型为Document我试图删除文档(如果存在)然后再将其添加到索引中,添加部分工作正常但删除部分无法正常工作如果文档存在,则不删除该文档。因此,如果我搜索一个术语并且匹配它会多次显示...请指出我在这里做错了什么

我正在使用ASP.Net MVC3和Entity Framework4。每次更新记录时,我打算更新索引,而不是重复。当我搜索它时,我得到的结果是两次或三次,具体取决于我进行更新的次数。

我尝试使用indexWriter.UpdateDocument(args);无效......

2 个答案:

答案 0 :(得分:4)

调试删除时,使用与delete命令相同的参数执行搜索有时会很有用,以确切了解要删除的内容。

如果您正在使用deleteDocuments(query),则应使用IndexSearcher这样的内容:

IndexSearcher is = new IndexSearcher(indexWriter.GetReader());
TopDocs topDocs = is.Search(query, 100);

看看你在topDocs中得到了什么。我怀疑你会发现查询没有返回任何结果。

答案 1 :(得分:0)

您可以通过以下方式完成:

    Query query = queryParser.parse("My Query!");
    writer.deleteDocuments(query);