在最新版本的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删除文档的方法。
答案 0 :(得分:2)
这是因为Lucene doc ID在IndexWriter
中是短暂的,并且可以随时更改(一旦合并完成)。
但是,IndexWriter
确实有一个tryDeleteDocument()
,它接近实时IndexReader
和int docID
。如果可能(自打开IndexReader
以来没有完成合并),删除将“正常”并且方法返回true
。如果该方法返回false
,则必须通过Term
或Query
删除,或者重新打开新的NRT阅读器并再次尝试删除。