Search code examples
solrsharding

How to query Solr shard


I've followed this to set up shard in Solr. As per this topic "Testing Index Sharding on Two Local Servers", I was able to query into shard and get the result (somehose:port1/solr/select?shards=somehost:port1/solr,somehost:port2/solr&indent=true&q=helloworld ).

In that page it is also mentioned that "Rather than require users to include the shards parameter explicitly, it is usually preferred to configure this parameter as a default in the RequestHandler section of solrconfig.xml." So, I made the changes in solrconfig.xml of the solr instance which is running on port1

    <requestHandler name="/select" class="solr.SearchHandler">

      <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
        <str name="df">text</str>
       </lst>
    <lst name="shards.info">
     <lst name="localhost:port2/solr">
     <long name="numFound">1333</long>
    <float name="maxScore">1.0</float>
    <str name="shardAddress">http://localhost:port2/solr</str>
   <long name="time">686</long>
   </lst>
  <lst name="localhost:port1/solr">
   <long name="numFound">342</long>
   <float name="maxScore">1.0</float>
   <str name="shardAddress">http://localhost:port1/solr</str>
   <long name="time">602</long>
  </lst>
  </lst>

Now, I'm trying to hit somehost:port1/solr/collection1/select?q=helloworld&wt=json&indent=true but I'm not getting the desired responce. Please let me know what I'm missing here?


Solution

  • You can't just copy the content from the response into your configuration file - those two formats are completely different. The reference is to the fact that each entry in the defaults section is added to the query string (unless they're provided there already - there are also options if you want to force a certain value that can't be overridden).

    <requestHandler name="/selectdistributed" class="solr.SearchHandler">
        <lst name="defaults">
            [...]
            <str name="shards">somehost:port1/solr,somehost:port2/solr</str>
        </lst>
    </requestHandler>
    

    .. should do what you want. This will add shards=somehost:port1/solr,somehost:port2/solr to the query string of all the requsts that go through that handler.