gpt4 book ai didi

java - 在 TopDocs.scoreDocs 循环中删除 Lucene 文档而不使用唯一 id

转载 作者:行者123 更新时间:2023-12-01 15:40:16 25 4
gpt4 key购买 nike

要删除 Lucene 上的文档,可以使用带有查询和/或术语的函数 indexWriter.deleteDocuments(...) 。效果很好。

但是,我需要浏览文档集合,并根据条件删除其中一些文档。我可以在文档中添加一个唯一的 id 字段,并根据这个唯一的 id 调用 indexWriter.deleteDocuments(...) 。但是,我想避免这个选项,而是做这样的事情:

TopDocs hits = indexSearcher.search(...);
for (ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = indexSearcher.doc(scoreDoc.doc);
if (...) {
indexWriter.delete(doc); // or similar
}
}

可以这样做吗?

ps:同样,我知道我可以在文档中添加一个唯一的 id 字段,并根据这个唯一的 id 通过调用 indexWriter.deleteDocuments(...) 来删除循环内的文档。那会很好用。但是,我想问如果没有这个选项是否可以做到这一点。请不要回答这是否是正确的方法。这是一个有趣的讨论,但这不是本文的目的。请仅回答是否可以(以及如何)或不添加唯一 ID 的问题。

pss:我知道我在重复自己,但我会再说一遍,因为我担心我会得到与这篇文章的目标无关的答案。实际上,请仅关注是否可以(以及如何)或不添加唯一 ID。

最佳答案

您可以从 IndexReader 获取它。

TopDocs hits = indexSearcher.search(...);
for (ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = indexSearcher.doc(scoreDoc.doc);
if (...) {
indexSearcher.getIndexReader().deleteDocument(doc);
}
}

但是,如果您已经在 Directory 上打开了 IndexWriter,那么它就不起作用,所以它可能不适用于您的情况。

关于java - 在 TopDocs.scoreDocs 循环中删除 Lucene 文档而不使用唯一 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com