对于我正在进行的项目,我有近1000万份文档的索引。对于从100k到5m不等的文档集,我需要定期添加字段。
Lucene 4支持更新文档(基本上是删除和添加)。将字段添加到更大的文档集中会有什么好方法吗?
我到目前为止所尝试的是使用SearcherManager
打包IndexWriter
,并对尚未包含该字段但与Query
匹配的文档进行小搜索我感兴趣的是,将它们包装在BooleanQuery
中。然后我迭代ScoreDocs
,检索文档,添加我的新字段,并使用我存储在每个文档中的writer.updateDocument
来调用uuid
。然后我拨打commit
和maybeRefreshBlocking
,重新获取IndexSearcher
并再次搜索。这有点慢,看起来很天真。
答案 0 :(得分:2)
您只需要 IndexSearcher ,然后您的搜索会根据您添加的字段返回不同的结果。
如果您的搜索不会受到您添加的字段的影响,则只需在将文档添加到索引时重新获取 IndexSearcher 。
因此,如果您只在必要时而不是在每次搜索之前重新获取 IndexSearcher ,它将简化并加快速度。