我们正在寻找一些关于在 Solr 中系统地重新索引不断增长的文档语料库(现在数千万,一年内数亿)而不降低当前运行的索引的建议。需要定期重新索引,因为:
- 围绕搜索需要额外模式字段的现有语料库引入了新功能,我们不能总是提前预料到
- 语料库跨多个分片编制索引。当它超过某个阈值时,我们需要创建更多的分片并在所有分片之间重新平衡文档(SolrCloud 似乎还不支持)。
当前索引接收非常频繁的更新和添加,需要在几分钟内可供搜索。因此,离线批量重新索引语料库的方法实际上并不奏效,因为当批处理完成时,新文档将可用。
我们目前正在研究的方法是:
- 创建一个新的分片集群并在那里批量重新索引,同时旧集群仍可用于搜索。不属于重新索引批次的新文档将同时发送到旧集群和新集群。准备好切换时,将负载均衡器指向新集群。
- 使用 CoreAdmin:为每个分片生成一个新核心并将重新索引的批次发送到新核心。不属于重新索引批次的新文档将同时发送到旧核心和新核心。准备好切换时,使用 CoreAdmin 动态交换内核。
如果人们能够确认或戳穿这些方法中的任何一种或所有方法,我们将不胜感激。一个比另一个更合适吗?还是我们完全关闭了?先感谢您。