我有以下步骤:
我使用带有?commit = true的updatejson调用插入记录 但这一步需要很长时间。有没有更好的方法来保持同步? 记录需要存储在solr中。我不介意它可以立即搜索。
答案 0 :(得分:1)
提交是昂贵的。每次添加后都不要提交。您可以为每个X请求(其中X取决于您的延迟要求和写入次数/秒)提交,或者每X分钟单独执行一次提交。 (使用/update?commit=true
)
答案 1 :(得分:1)
有两个方面:
为了使其可靠地保持同步,您需要执行某种形式的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条记录的时间从几天到几小时不等。