0
我有一个分片和1个领导& 1个副本架构。使用“CloudSolrClient”时,查询将分发到领导者和副本。但是有没有办法只将它指向领导者(使用zookeeper),而不是手动查找领导者并构建查询?有没有办法直接使用solrj查询solr“leader”?
我有一个分片和1个领导& 1个副本架构。使用“CloudSolrClient”时,查询将分发到领导者和副本。但是有没有办法只将它指向领导者(使用zookeeper),而不是手动查找领导者并构建查询?有没有办法直接使用solrj查询solr“leader”?
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服务器。 –
另一种选择是在solrj创建httpsolrclient实例,指向您的领导者。这将通过你的动物园管理员。 –
@ShivaKumarSS在“合并”(将旧文档与新文档合并)期间,我们正面临一些问题。因此,在索引期间,我们希望查询在查找旧文档(用于合并)时直接指向领导者。 – Riya