Solr用于重新索引大型文档语料库

时间:2011-05-10 02:19:34

标签: indexing clustered-index solr bigdata

我们正在寻找一些建议,围绕Solr系统地重新索引不断增长的文档集(现在数千万,一年中有数亿),而不会降低当前运行的索引。需要在定期基础上重新编制索引,因为:

  • 介绍了新功能 搜索现有的语料库 需要其他架构字段 这是我们无法一直期待的 推进
  • 语料库跨多个索引 碎片。当它超过一定时 门槛,我们需要创造更多 碎片和重新平衡文件 均匀地跨过所有这些(其中 SolrCloud似乎还没有 支持)。

当前索引会收到非常频繁的更新和添加,需要在几分钟内进行搜索。因此,在批量脱机中重新索引语料库的方法并不真正起作用,因为批次完成时,新文档将可用。

我们目前正在研究的方法是:

  • 创建一个新的分片集群 旧的批量重新索引 群集仍然可用 搜索。没有的新文件 重新索引的批次的一部分被发送 旧集群和新集群 簇。准备切换时,指向 负载均衡器到新集群。
  • 使用CoreAdmin:每个产生一个新核心 分片并发送重新索引的批处理 到新的核心。新文件 不属于重新编制索引的批次 发送到旧核心和 新核心。准备好切换时 使用CoreAdmin动态交换 芯

我们很感激,如果有人可以确认或者在这些方法中确认或挖洞。一个比另一个更合适吗?还是我们完全脱了?提前谢谢。

1 个答案:

答案 0 :(得分:2)

这可能不适用于你们,但我会提出解决这个问题的方法。

我们的Solr设置目前是单核心。我们将来会添加更多内核,但绝大多数数据都写入单个内核。

考虑到这一点,分片并不适用于我们。我研究了分布式搜索 - 切断数据并在不同的服务器上运行不同的切片。对我来说,这似乎太复杂了。它会使备份/恢复更加困难,并且在执行分布式搜索时最终会丢失某些功能。

我们最终采用的方法是一个非常简单的集群主/从设置。

每个群集由一个主数据库和两个负载平衡的solr从属组成。所有新数据都写入主数据库,从站配置为每5分钟同步一次新数据。在正常情况下,这是一个非常好的设置。在主服务器上进行重新索引操作,并且在发生这种情况时,仍然可以从中读取从服务器。

当发生重大的重新索引操作时,我从负载均衡器中删除一个从站并关闭另一个从站的轮询。因此,面向Solr数据库的客户现在不与主服务器同步,而另一个正在更新。重新索引完成且离线从属数据库同步后,我将其添加回负载均衡器,从负载均衡器中删除其他从属数据库,然后重新配置它以与主站同步。

到目前为止,这一点非常有效。我们目前在我们的数据库中有大约500万个文档,这个数字在多个集群中的扩展速度要高得多。

希望这有帮助!