2016-12-07 74 views
0

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

+0

在云模式下部署此类用例需要什么? ?你为什么不部署单独的solr服务器。 –

+0

另一种选择是在solrj创建httpsolrclient实例,指向您的领导者。这将通过你的动物园管理员。 –

+0

@ShivaKumarSS在“合并”(将旧文档与新文档合并)期间,我们正面临一些问题。因此,在索引期间,我们希望查询在查找旧文档(用于合并)时直接指向领导者。 – Riya

回答

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; 
    } 
相关问题