2016-12-07 76 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; 
    } 
相關問題