我使用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。有没有什么办法解决这一问题?
答案 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) {}