2013-01-15 112 views
2

对于我正在进行的项目,我有一个近1000万个文档的索引。对于范围从10k到5m的文档,我需要定期添加字段。批量更新策略lucene?

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

我已经试过到目前为止使用SearcherManager包装一个IndexWriter,并且使小搜索那些尚未包含该领域的文件,但匹配在BooleanQuery包装这些的Query我很感兴趣, 。然后,我遍历ScoreDocs,检索文档,添加我的新字段,并与每个文档存储的uuid调用writer.updateDocument。然后我打电话commitmaybeRefreshBlocking,重新获取IndexSearcher并再次搜索。这有点慢,似乎是一种天真的做法。

回答

2

你只需要要求IndexSearcher的在你的搜索将返回根据您添加字段不同的结果。

如果您的搜索不会受到您添加的字段的影响,那么您只需要在将文档添加到索引时重新获取IndexSearcher

因此,如果您只在必要时重新搜索IndexSearcher,而不是在每次搜索之前,它会简化和加快速度。

+0

谢谢马克。对于我的情况,我认为需要重新获得,因为我只想处理那些没有额外领域的文档;最快(?)的方式来确定这是再次搜索..我想知道,虽然'正确的'批量将是,因为可以在批处理更多的文件,搜索,承诺等更少的开销。 – RobAu