Solr原子更新

时间:2014-03-05 17:55:02

标签: json solr

我有以下步骤:

  1. 更新数据库记录
  2. 使用json
  3. 向solr添加记录
  4. 在数据库中提交记录
  5. 我使用带有?commit = true的updatejson调用插入记录 但这一步需要很长时间。有没有更好的方法来保持同步? 记录需要存储在solr中。我不介意它可以立即搜索。

3 个答案:

答案 0 :(得分:1)

提交是昂贵的。每次添加后都不要提交。您可以为每个X请求(其中X取决于您的延迟要求和写入次数/秒)提交,或者每X分钟单独执行一次提交。 (使用/update?commit=true

答案 1 :(得分:1)

有两个方面:

  • 保持数据库和Solr同步
  • 加快速度

为了使其可靠地保持同步,您需要执行某种形式的two-phase commit。参见

为了快速完成,你应该像the other answer中的arun建议一样分批进行,因为它是suggested in Solrj documentation。如果您不需要立即可用于搜索的文档,则情况确实如此。

您还可以尝试使用比硬提交便宜的soft commits。见"commit" and "optimize" in Solr documentation。然后,网址将以update?softCommit=true结尾。本文对软件和硬件提交进行了很好的讨论:Understanding Transaction Logs, Soft Commit and Commit in SolrCloud

答案 2 :(得分:1)

我通过执行?commitWithin = 15000解决了这个问题 这会持久保存数据,但不会将数据与索引合并。它每15秒执行一次。足以阻止我的过程。加载100000条记录的时间从几天到几小时不等。