有没有办法直接使用solrj查询solr“leader”?

时间:2016-12-07 13:00:06

标签: solr solrj apache-zookeeper solr5

我有一个单一的碎片和一个领导者& 1副本架构。使用“CloudSolrClient”时,查询将分发给leader和replica。但有没有办法只将其指向领导者(使用zookeeper),而不是手动找到领导者并构建查询?

1 个答案:

答案 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;
    }