对于我正在进行的一个项目,我有一个包含近 1000 万个文档的索引。对于100k到5m的文档集,我需要定期添加字段。
Lucene 4支持更新文档(基本上是删除和添加)。将字段添加到更大的文档集中的好方法是什么?
到目前为止,我尝试的是使用 SearcherManager
包装 IndexWriter
,并对尚未包含该字段但匹配的文档进行小型搜索我感兴趣的 Query
,通过将它们包装在 BooleanQuery
中。然后,我迭代 ScoreDocs
,检索文档,添加新字段,并使用我随每个文档存储的 uuid
调用 writer.updateDocument
。然后我调用 commit
和 maybeRefreshBlocking
,重新获取 IndexSearcher
并再次搜索。这有点慢,而且似乎是一种幼稚的方法。
最佳答案
您只需需要 IndexSearcher,搜索就会根据您添加的字段返回不同的结果。
如果您的搜索永远不会受到您添加的字段的影响,您只需在将文档添加到索引时重新获取IndexSearcher即可。
因此,如果您仅在必要时而不是在每次搜索之前重新获取IndexSearcher,那么至少会稍微简化并加快速度。
关于lucene - lucene批量更新策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14333257/