我正在使用Lucene 4来保存我的数据。我现在面临的问题如下:
如何从索引中删除文档,然后检索已删除文档的docIds?
以下是我用来删除文档的方法:
Query query = new BooleanQuery();
...
indexWriter.deleteDocuments(query);
但是一旦调用了这个方法,我就没有找到一种方法(方法或回调)来获取已删除的文档(及其字段)。
有没有人知道如何做到这一点?
答案 0 :(得分:3)
我认为你不能在一次通话中这样做。
由于Lucene删除不会立即发生(需要额外的commit()
),返回已删除的文档ID会有点模棱两可。如果您查看delete方法,它实际上只是将作业添加到其中一个删除队列。也就是说,commit()
也没有返回与此相关的任何内容; - (
无论如何,我能想到的唯一方法是运行你的query
,收集文件/文件ID并在之后运行deleteDocuments(query)
。您可能会得到一些重叠(比如说另一个线程会删除相同的文档)但由于commit()
阶段,这是不可避免的。