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,我认为有一种方法可以用它来更新索引。
答案 0 :(得分:5)
Lucene不允许更新文档中的字段。它严格来说是一种删除/添加机制。
文档的docId可以在优化,合并等过程中进行更改,因此依赖于它始终保持不变不是您想要做的事情。您应该将自己的字段放入文档中,该字段不会随着时间的推移而改变,而是使用它。
答案 1 :(得分:1)
有一种方法可以通过docid删除:IndexWriter.tryDeleteDocument。删除文档后,您可以添加新文档,正如其他人所说,Lucene是如何执行更新的。
上面链接的文档提供了一些有趣的信息,说明为什么它被称为尝试 DeleteDocument