我正在使用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);
无效......
答案 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);