You can define a CloudSolrServer as like that:

*private static CloudSolrServer solrServer;*

and then define the addres of your zookeeper host:

*private static String zkHost = "localhost:9983";*

initialize your variable:

*solrServer = new CloudSolrServer(zkHost);*

You can get leader list as like:

*ClusterState clusterState =
cloudSolrServer.getZkStateReader().getClusterState();
List<Replica> leaderList = new ArrayList<>();
  for (Slice slice : clusterState.getSlices(collectionName)) {
  leaderList.add(slice.getLeader()); /
}*


For querying you can try that:
*
*
*SolrQuery solrQuery = new SolrQuery();*
*//fill your **solrQuery variable here**
*
*QueryRequest queryRequest = new QueryRequest(solrQuery,
SolrRequest.METHOD.POST);
queryRequest.process(**solrServer**);*

CloudSolrServer uses LBHttpSolrServer by default. It's definiton is like
that: *LBHttpSolrServer or "Load Balanced HttpSolrServer" is just a wrapper
to CommonsHttpSolrServer. This is useful when you have multiple SolrServers
and query requests need to be Load Balanced among them. It offers automatic
failover when a server goes down and it detects when the server comes back
up.*
*
*
*
*

2013/7/10 Anshum Gupta <ans...@anshumgupta.net>

> You don't really need to direct any query specifically to a leader. It will
> automatically be routed to the right leader.
> You may put a load balancer on top to just fix the problem with querying a
> node that has gone away.
>
> Also, ZK aware SolrJ Java client that load-balances across all nodes in
> cluster.
>
>
> On Wed, Jul 10, 2013 at 2:52 PM, Floyd Wu <floyd...@gmail.com> wrote:
>
> > Hi there,
> >
> > I've built a SolrCloud cluster from example, but I have some question.
> > When I send query to one leader (say
> > http://xxx.xxx.xxx.xxx:8983/solr/collection1) and no problem everything
> > will be fine.
> >
> > When I shutdown that leader, the other replica(
> > http://xxx.xxx.xxx.xxx:9983/solr/collection1) in the some shard will be
> > new
> > leader. The problem is:
> >
> > The application doesn't know new leader's location and still send request
> > to http://xxx.xxx.xxx.xxx:8983/solr/collection1 and of course no
> response.
> >
> > How can I know new leader in my application?
> > Are there any mechanism that application can send request to one fixed
> > endpoint no matter who is leader?
> >
> > For example, application just send to
> > http://xxx.xxx.xxx.xxx:8983/solr/collection1
> > even the real leader run on http://xxx.xxx.xxx.xxx:9983/solr/collection1
> >
> > Please help on this or give me some key infomation to google it.
> >
> > Many thanks.
> >
> > Floyd
> >
>
>
>
> --
>
> Anshum Gupta
> http://www.anshumgupta.net
>

Reply via email to