我们正在寻找一些建议,围绕Solr系统地重新索引不断增长的文档集(现在数千万,一年中有数亿),而不会降低当前运行的索引。需要在定期基础上重新编制索引,因为:
当前索引会收到非常频繁的更新和添加,需要在几分钟内进行搜索。因此,在批量脱机中重新索引语料库的方法并不真正起作用,因为批次完成时,新文档将可用。
我们目前正在研究的方法是:
我们很感激,如果有人可以确认或者在这些方法中确认或挖洞。一个比另一个更合适吗?还是我们完全脱了?提前谢谢。
答案 0 :(得分:2)
这可能不适用于你们,但我会提出解决这个问题的方法。
我们的Solr设置目前是单核心。我们将来会添加更多内核,但绝大多数数据都写入单个内核。
考虑到这一点,分片并不适用于我们。我研究了分布式搜索 - 切断数据并在不同的服务器上运行不同的切片。对我来说,这似乎太复杂了。它会使备份/恢复更加困难,并且在执行分布式搜索时最终会丢失某些功能。
我们最终采用的方法是一个非常简单的集群主/从设置。
每个群集由一个主数据库和两个负载平衡的solr从属组成。所有新数据都写入主数据库,从站配置为每5分钟同步一次新数据。在正常情况下,这是一个非常好的设置。在主服务器上进行重新索引操作,并且在发生这种情况时,仍然可以从中读取从服务器。
当发生重大的重新索引操作时,我从负载均衡器中删除一个从站并关闭另一个从站的轮询。因此,面向Solr数据库的客户现在不与主服务器同步,而另一个正在更新。重新索引完成且离线从属数据库同步后,我将其添加回负载均衡器,从负载均衡器中删除其他从属数据库,然后重新配置它以与主站同步。
到目前为止,这一点非常有效。我们目前在我们的数据库中有大约500万个文档,这个数字在多个集群中的扩展速度要高得多。
希望这有帮助!