我有一个单一的碎片和一个领导者& 1副本架构。使用“CloudSolrClient”时,查询将分发给leader和replica。但有没有办法只将其指向领导者(使用zookeeper),而不是手动找到领导者并构建查询?
答案 0 :(得分:0)
有可能在SolrJ中获得Shards领导者,并且有几种情况下这很有用,例如当您需要以编程方式执行备份时(参见Solr in Action书中的示例)。 这是我使用的相关代码:
private final String COLLECTION_NAME = "myCollection";
private final String ZOOKEPER_CLIENT_TIMEOUT_MS = "1000000"
private Map<String, String> getShardLeaders(CloudSolrServer cloudSolrServer) throws InterruptedException, KeeperException {
Map<String, String> shardleaders = new TreeMap<String, String>();
ZkStateReader zkStateReader = cloudSolrServer.getZkStateReader();
for (Slice slice : zkStateReader.getClusterState().getSlices(COLLECTION_NAME)) {
shardleaders.put(slice.getName(), zkStateReader.getLeaderUrl(COLLECTION_NAME, slice.getName(), ZOOKEPER_CLIENT_TIMEOUT_MS));
}
return shardleaders;
}