一个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
Run Code Online (Sandbox Code Playgroud)
我基本上对字段3和4进行了更新,但希望保留5和6完整.
目前我可以抓住这些行,进行我想要的更新,但我无法找到在索引中更新它们的方法.
一个indexWriter.updateDocuments(...)或一个indexwriter.DeleteDocuments(...)将导致文档1,2 3被删除.
由于我有documentId,我假设有一种方法可以用它来更新索引.
小智 6
Lucene不允许更新文档中的字段.它严格来说是一个删除/添加机制.
文档的docId可以在优化,合并等过程中进行更改,因此依赖于它始终保持不变并不是您想要做的事情.您应该将自己的字段放入文档中,该字段不会随着时间的推移而改变,而是使用它.