在最新版本的 lucene 4.6 中,IndexReader.deleteDocuments()
不再存在。有人告诉我应该使用 IndexWriter
来代替。然而,API文档显示:
void deleteDocuments(Query... queries)
删除与任何提供的查询匹配的文档,
void deleteDocuments(Query query)
删除与所提供的查询匹配的文档,
void deleteDocuments(Term... terms)
删除包含任何术语的文档,并且
void deleteDocuments(Term term)
删除包含术语的文档。
没有通过文档 ID 删除文档的方法。
最佳答案
这是因为 Lucene 文档 ID 在 IndexWriter
中是短暂的,并且可以随时更改(合并完成后)。
但是,IndexWriter
确实有一个 tryDeleteDocument()
,它需要一个近乎实时的 IndexReader
和一个 int docID
。如果可能(自打开 IndexReader
以来没有完成任何合并),删除将“起作用”并且该方法返回 true
。如果该方法返回 false
,您必须通过 Term
或 Query
删除,或者重新打开新的 NRT 阅读器并再次尝试删除。
关于Lucene 4.6 IndexReader 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823408/