Can you brief as how to make a direct call to Zookeeper instead of Cloud Collection(as currently I was querying the Cloud something like *"http://192.168.2.183:8900/solr/collection1/select?q=*:* <http://192.168.2.183:8900/solr/collection1/select?q=*:*>"* ) from UI, now if I assume shard 8900 is down then how can I still make the call.
I have followed the Apache Tutorial(with separate zookeeper running on port 2181) http://wiki.apache.org/solr/SolrCloud Can you please be more specific in respect to zookeeper distributed calls. Regards On Wed, Feb 19, 2014 at 9:45 PM, Per Steffensen <st...@designware.dk> wrote: > On 19/02/14 07:57, Vineet Mishra wrote: > >> Thanks for all your response but my doubt is which *Server:Port* should >> the >> >> query be made as we don't know the crashed server or which server might >> crash in the future(as any server can go down). >> > That is what CloudSolrServer will deal with for you. It knows which > servers are down and make sure not to send request to those servers. > > >> The only intention for writing this doubt is to get an idea about how the >> query format for distributed search might work if any of the shard or >> replica goes down. >> > > // Setting up your CloudSolrServer-client > CloudSolrServer client= new CloudSolrServer(<zkConnectionStr>); // > <zkConnectionStr> being the same string as you provide in -D|zkHost when > starting your servers > |client.setDefaultCollection("collection1"); > client.connect(); > > // Creating and firing queries (you can do it in different way, but at > least this is an option) > SolrQuery query = new SolrQuery("*:*"); > QueryResponse results = client.query(query); > > > Because you are using CloudSolrServer you do not have to worry about not > sending the request to a crashed server. > > In your example I believe the situation is as follows: > * One collection called "collection1" with two shards "shard1" and > "shard2" each having two replica "replica1" and "replica2" (a replica is an > "instance" of a shard, and when you have one replica you are not having > replication). > * collection1.shard1.replica1 is running on localhost:8983 and > collection1.shard1.replica2 is running on localhost:8900 (or maybe switched) > * collection1.shard2.replica1 is running on localhost:7574 and > collection1.shard2.replica2 is running on localhost:7500 (or maybe switched) > If localhost:8900 is the only server that is down, all data is still > available for search because every shard has at least on replica running. > In that case I believe setting "shards.tolerant" will not make a > difference. You will get your response no matter what. But if > localhost:8983 was also down there would no live replica of shard1. I that > case you will get an exception from you query, indicating that the query > cannot be carried out over the complete data-set. In that case if you set > "shards.tolerant" that behaviour will change, and you will not get an > exception - you will get a real response, but it will just not include data > from shard1, because it is not available at the moment. That is just the > way I believe "shards.tolerant" works, but you might want to verify that. > > To set "shards.tolerant": > > SolrQuery query = new SolrQuery("*:*"); > query.set("shards.tolerant", true); > QueryResponse results = client.query(query); > > > Believe distributes search is default, but you can explicitly require it by > > query.setDistrib(true); > > or > > query.set("distrib", true); > > >> Thanks >> > >