是否可以使用其文档ID更新Lucene文档?

时间:2013-10-04 18:09:11

标签: lucene

ScoreDoc[]数组包含搜索中的所有文档ID。我想使用这些文档ID来更新单个文档。在这个特定的实例中,我不能唯一地标识我想要更新的行,因为给定的术语将导致匹配多个文档。

想象一下查询,其中1:a,2:b并返回以下文档

       1 2 3 4 5 6
doc 1: a b c d e f
doc 2: a b g h i j
doc 3: a b k l m n

我基本上对字段3和4进行了更新,但希望保留5和6完整。

目前我可以抓住这些行,进行我想要的更新,但我无法找到在索引中更新它们的方法。

indexWriter.updateDocuments(...)indexwriter.DeleteDocuments(...)会导致文档1,2 3被删除。

由于我有documentId,我认为有一种方法可以用它来更新索引。

2 个答案:

答案 0 :(得分:5)

Lucene不允许更新文档中的字段。它严格来说是一种删除/添加机制。

文档的docId可以在优化,合并等过程中进行更改,因此依赖于它始终保持不变不是您想要做的事情。您应该将自己的字段放入文档中,该字段不会随着时间的推移而改变,而是使用它。

答案 1 :(得分:1)

有一种方法可以通过docid删除:IndexWriter.tryDeleteDocument。删除文档后,您可以添加新文档,正如其他人所说,Lucene是如何执行更新的。

上面链接的文档提供了一些有趣的信息,说明为什么它被称为尝试 DeleteDocument