2016-12-07 13 views
0

У меня один осколок и 1 лидер & 1 реплика архитектура. При использовании «CloudSolrClient» запросы распространяются как на лидера, так и на реплику. Но есть ли способ указывать его только на лидера (используя zookeeper), кроме поиска лидера вручную и построения запроса?Есть ли способ запросить solr "leader" непосредственно с помощью solrj?

+0

Что потребность в таком случае использования при развертывании в режиме облака. ? Почему бы вам не развернуть отдельный автономный сервер solr. –

+0

Другой вариант заключается в создании экземпляра 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; 
    }