Lucene 4.6 IndexReader删除

时间:2013-12-29 08:24:57

标签: lucene

在最新版本的lucene,4.6中,IndexReader.deleteDocuments()不再存在。有人告诉我应该使用IndexWriter代替。但是,API文档显示:

void deleteDocuments(Query... queries)

删除与任何提供的查询匹配的文档,

void deleteDocuments(Query query)

删除与提供的查询匹配的文档

void deleteDocuments(Term... terms)

删除包含任何条款的文件,

void deleteDocuments(Term term)

删除包含term的文档。

没有按文档ID删除文档的方法。

1 个答案:

答案 0 :(得分:2)

这是因为Lucene doc ID在IndexWriter中是短暂的,并且可以随时更改(一旦合并完成)。

但是,IndexWriter确实有一个tryDeleteDocument(),它接近实时IndexReaderint docID。如果可能(自打开IndexReader以来没有完成合并),删除将“正常”并且方法返回true。如果该方法返回false,则必须通过TermQuery删除,或者重新打开新的NRT阅读器并再次尝试删除。