使CloudSolrServer仅对领导者运行数据导入

时间:2013-04-11 16:07:28

标签: solr dataimporthandler solrcloud

我使用SolrCloud设置了两个服务器Solr集群。目前我有Master和Replica。

我希望dataimports转到领导者,因为在slave上进行delta-imports没有任何意义(更新不会分发给leader)。

从文档中我得到CloudSolrServer知道群集状态(从Zookeeper获取),默认情况下仅将所有更新发送给领导者。

我想要的是让CloudSolrServer将所有dataimport命令发送给主服务器。我有以下代码:

        SolrServer solrServer = new CloudSolrServer("localhost:2181");
        ModifiableSolrParams params = new ModifiableSolrParams();
        params.set("qt", "/dataimport");
        params.set("command", "delta-import");
        QueryResponse response = solrServer.query(params);

但是我看到请求仍然发送到我的服务器 localhost:8080和localhost:8983。有没有什么办法解决这一问题?

2 个答案:

答案 0 :(得分:0)

只需将您的solr服务器初始化替换为

SolrServer solrServer = new CloudSolrServer("zkHost1:port,zkHost2:port");

这将导致solr服务器客户端向zookeeper咨询solrcloud状态。 有关更多详细信息,请从zookeeper集合中将CloudSolrServer文档读取到init。

答案 1 :(得分:-2)



try { CloudSolrServer css = new CloudSolrServer("host1:2181,host2:2181"); css.connect(); ZkStateReader zkSR2 = css.getZkStateReader(); String leader = zkSR2.getLeaderUrl("collection_name", "shard1", 10); } catch (KeeperException e) { } catch (IOException
e) { } catch (InterruptedException e) {}