Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 Lucene 4 来保存我的数据。我现在面临的问题如下:
如何从索引中删除文档,然后检索已删除文档的 docIds?
这是我用来删除文档的方法:
Query query = new BooleanQuery(); ... indexWriter.deleteDocuments(query);
但是一旦调用了这个方法,我还没有找到一种方法(方法或回调)来获取已删除的文档(及其字段)。
有谁知道如何做到这一点?
我不认为你可以在一个电话中做到这一点。
由于 Lucene 删除不会立即发生(需要额外commit()的),因此返回已删除的文档 ID 会有点模棱两可。如果您查看 delete 方法,它实际上只是将作业添加到删除队列之一。也就是说,commit()也不返回与此相关的任何内容;-(
commit()
无论如何,我能想到的唯一方法是运行你的query,收集文档/文档 ID,然后运行deleteDocuments(query)。您可能会遇到一些重叠(例如,如果另一个线程会删除相同的文档),但由于commit()阶段的原因,这是不可避免的。
query
deleteDocuments(query)