批量更新策略lucene?

批量更新策略lucene?,lucene,updates,bulk,Lucene,Updates,Bulk,对于我正在进行的一个项目,我有一个近1000万个文档的索引。对于从100k到5m的文档集,我需要定期添加字段 Lucene 4支持更新文档(基本上是删除和添加)。将字段添加到更大的文档集中的好方法是什么 到目前为止,我尝试使用SearcherManager包装IndexWriter,并通过在BooleanQuery中包装这些内容,对尚未包含字段但与我感兴趣的查询匹配的文档进行小规模搜索。然后,我迭代ScoreDocs,检索文档,添加新字段并调用writer.updateDocument,使用与每

对于我正在进行的一个项目,我有一个近1000万个文档的索引。对于从100k到5m的文档集,我需要定期添加字段

Lucene 4支持更新文档(基本上是删除和添加)。将字段添加到更大的文档集中的好方法是什么


到目前为止,我尝试使用
SearcherManager
包装
IndexWriter
,并通过在
BooleanQuery
中包装这些内容,对尚未包含字段但与我感兴趣的
查询匹配的文档进行小规模搜索。然后,我迭代
ScoreDocs
,检索文档,添加新字段并调用
writer.updateDocument
,使用与每个文档一起存储的
uuid
。然后我调用
commit
maybeRefreshBlocking
,重新获取
indexsearch
并再次搜索。这有点慢,而且似乎是一种幼稚的方法。

您只需要使用索引搜索器,搜索就会根据您添加的字段返回不同的结果

如果您的搜索不受添加的字段的影响,则只需在文档添加到索引时重新获取索引搜索器


因此,如果您只在必要时而不是在每次搜索之前重新获取索引搜索器,它将简化并加快搜索速度。

谢谢。对于我的情况,我认为需要重新获取,因为我只想处理没有额外字段的文档;确定这一点的最快方法是再次搜索。。我想知道“正确”的批处理大小是多少,因为批处理中可以处理的文档越多,搜索、提交等的开销就越小。