如何使用Sunspot / Websolr在服务器之间快速传输数据?

时间:2014-12-22 20:39:42

标签: solr sunspot websolr

由于我怀疑我的设置是相当传统的,所以我想首先提供一些上下文。我们的Solr设置涉及三种环境:

  1. 生产 - 在Websolr上托管的Solr服务器。
  2. 暂存 - 也是Websolr上托管的Solr服务器。
  3. 开发 - 通过sunspot_solr gem支持,允许我们轻松设置我们自己的本地Solr服务器进行开发。
  4. 在大多数情况下,这运作良好。我们有很多记录,所以做一个完整的重新索引需要几个小时(尽管急切加载和使用后台作业来并行化工作)。但这并不太可怕,因为我们不需要经常完全重新索引。

    但是另一个场景开始变得非常烦人......我们经常需要用生产数据填充我们的本地机器(或登台环境)(即基本上从生产中获取SQL转储并管道它进入我们的本地数据库)。我们一直这样做的错误修正和诸如此类的。

    此时,由于我们的数据已更改,因此我们的本地Solr索引已过期。因此,如果我们希望我们的搜索能够正常工作,我们还需要重新索引本地Solr服务器,并且需要非常长的时间

    现在的问题是:我想简单地将生产索引复制到我的机器上(即概念上类似于SQL转储但是对于Solr服务器而不是数据库),而不是完全重新索引。我已经用Google搜索了足够的知道这是可能的,但没有看到任何特定于Websolr / Sunspot的解决方案。这些是常见的工具,我认为其他人必须已经想到这一点。

    提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

Solr(和websolr)更好的秘密之一:您可以使用Solr Replication API在两个索引之间复制数据。

如果您正在复制生产索引" prod54321"进入QA索引" qa12345",然后您在QA索引的fetchindex处理程序上使用replication命令启动复制。这是一个使用cURL快速命令来近似的。

curl -X POST https://index.websolr.com/solr/qa12345/replication \
  -d command=fetchindex \
  -d masterUrl=https://index.websolr.com/solr/prod54321/replication

(请注意两个网址上replication请求处理程序的引用。)