1

我正在使用 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);

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

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

我尝试使用indexWriter.UpdateDocument(args);无济于事...

4

2 回答 2

4

在调试删除时,有时使用与删除命令相同的参数执行搜索会很有用,以准确查看将要删除的内容。

如果你正在做deleteDocuments(query)你应该使用IndexSearcher这样的:

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

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

于 2012-07-02T06:15:03.900 回答
0

你可以简单地做到这一点:

    Query query = queryParser.parse("My Query!");
    writer.deleteDocuments(query);
于 2014-06-19T06:35:34.623 回答