使用lucene 4删除文档并检索已删除文档的所有docIds

时间:2013-01-29 14:30:36

标签: java lucene

我正在使用Lucene 4来保存我的数据。我现在面临的问题如下:

如何从索引中删除文档,然后检索已删除文档的docIds?

以下是我用来删除文档的方法:

Query query = new BooleanQuery();
...
indexWriter.deleteDocuments(query);

但是一旦调用了这个方法,我就没有找到一种方法(方法或回调)来获取已删除的文档(及其字段)。

有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:3)

我认为你不能在一次通话中这样做。

由于Lucene删除不会立即发生(需要额外的commit()),返回已删除的文档ID会有点模棱两可。如果您查看delete方法,它实际上只是将作业添加到其中一个删除队列。也就是说,commit()也没有返回与此相关的任何内容; - (

无论如何,我能想到的唯一方法是运行你的query,收集文件/文件ID并在之后运行deleteDocuments(query)。您可能会得到一些重叠(比如说另一个线程会删除相同的文档)但由于commit()阶段,这是不可避免的。