У меня один осколок и 1 лидер & 1 реплика архитектура. При использовании «CloudSolrClient» запросы распространяются как на лидера, так и на реплику. Но есть ли способ указывать его только на лидера (используя zookeeper), кроме поиска лидера вручную и построения запроса?Есть ли способ запросить solr "leader" непосредственно с помощью solrj?
0
A
ответ
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;
}
Что потребность в таком случае использования при развертывании в режиме облака. ? Почему бы вам не развернуть отдельный автономный сервер solr. –
Другой вариант заключается в создании экземпляра httpsolrclient, указывающего на вашего лидера. Это будет проходить мимо вашего зоопарка. –
@ShivaKumarSS Мы сталкиваемся с проблемой при объединении (слияние старого документа с новым документом). Поэтому во время индексации мы хотим, чтобы запросы указывали лидером непосредственно при поиске старого документа (для слияния). – Riya