java - 使用lucene 4删除文档并检索已删除文档的所有docId

标签 java lucene

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

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

下面是我用来删除文件的方法:

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

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

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

最佳答案

我不认为你可以在一个电话中完成这件事。

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

无论如何,我能想到的唯一方法是运行您的query,收集文档/文档 ID,然后运行 ​​deleteDocuments(query)。您可能会遇到一些重叠(比如另一个线程是否会删除相同的文档)但这是不可避免的,因为 commit() 阶段。

关于java - 使用lucene 4删除文档并检索已删除文档的所有docId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14585264/

相关文章:

java - Vaadin 14 日期字段格式

java - em.merge 不生成更新语句

lucene - Lucene 3.0.2 中的 Field.Store.COMPRESS

solr - 对每个桶的 solr facet 进行百分比计算

elasticsearch - 在 Elasticsearch 中使用模糊查询时找到实际匹配词

javafx,拖动优化 - 各种想法

java - 如何在 Java 中生成类似于 YouTube 视频标识符字符串的字符串?

javascript - 捕获 Nashorn 的全局变量

nhibernate - 流利的 NHibernate + Lucene 搜索 (NHibernate.Search)

Lucene LongField 使用 Query 进行精确搜索