It fails because you are using "localhost" as part of a shard name. When you send the request to "fred" it uses the "fred" shard and the "localhost" shard (which is the same as fred!)
-Yonik On Wed, Aug 27, 2008 at 12:07 PM, Ronald Aubin <[EMAIL PROTECTED]> wrote: > Hello, > I have been performing some simple distributed search tests and don't > understand why distributed search seems to work in some circumstances but > not others. > > In my setup I have compiled the example server using the solr trunk > downloaded on Aug 22nd. I am running a sample server instance on 2 separate > hosts (localhost and "fred"). I've added a portion of the sample docs > [a-n]*.xml to the local host solr server, and added the other portion, > [m-z]*.xml sample docs to host fred. > > Assuming that I have setup things correctly, I would expect to receive a see > non zero length SolrDocumentList for any distributed search that matches > syntax in the example docs. > > Specifically when I test the contents of each server separately ( using the > included TestCase ) the tests pass. This confirms that each server has > different documents. However when I do the distributed tests, it seems the > tests pass or fail based on the initial URL passed in the > createNewSolrServer(String URL). I realize a real junit should be self > contained, unlike this one. > > junit test testDistrbutedSearch() passes, while testDistrbutedSearch2() > fails. Why? > > My understanding is that each host should send a query to all shards and > collate the responses, and return them to the client. Is this true? > > Ron > > > Here is my TestCase; > > package org.apache.solr.client.solrj.ron; > > import junit.framework.TestCase; > > import org.apache.solr.client.solrj.SolrQuery; > import org.apache.solr.client.solrj.SolrServer; > import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; > import org.apache.solr.client.solrj.response.QueryResponse; > import org.apache.solr.client.solrj.response.SolrPingResponse; > import org.apache.solr.common.SolrDocumentList; > import org.apache.solr.common.params.ShardParams; > > public class SolrExampleDistributedTest extends TestCase { > > int port = 8983; > static final String context = "/solr"; > > static String SOLR_SHARD1 = "localhost:8983/solr"; > static String SOLR_SHARD2 = "fred:8983/solr"; > static String SOLR_SHARDS = SOLR_SHARD1 + "," + SOLR_SHARD2; > static String HTTP_PREFIX = "http://"; > static String SOLR_URL1 = HTTP_PREFIX + SOLR_SHARD1; > static String SOLR_URL2 = HTTP_PREFIX + SOLR_SHARD2; > static String QUERY1 = "Samsung"; > static String QUERY2 = "solr"; > > @Override > public void setUp() throws Exception { > super.setUp(); > > } > > public SolrExampleDistributedTest(String name) { > super(name); > } > > @Override > public void tearDown() throws Exception { > super.tearDown(); > } > > protected SolrServer createNewSolrServer(String url) { > try { > > CommonsHttpSolrServer s = new CommonsHttpSolrServer(url); > s.setConnectionTimeout(100); // 1/10th sec > s.setDefaultMaxConnectionsPerHost(100); > s.setMaxTotalConnections(100); > return s; > } catch (Exception ex) { > throw new RuntimeException(ex); > } > } > > public void testLocalhost() { > try { > SolrServer server = createNewSolrServer(SOLR_URL1); > > SolrQuery query = new SolrQuery(); > query.setQuery(QUERY1); > QueryResponse qr = server.query(query); > SolrDocumentList sdl = qr.getResults(); > assertTrue(sdl.getNumFound() > 0); > > query = new SolrQuery(); > query.setQuery(QUERY2); > qr = server.query(query); > sdl = qr.getResults(); > assertTrue(sdl.getNumFound() == 0); > > } catch (Exception ex) { > ex.printStackTrace(); > fail(); > } > } > > public void testRemoteHost() { > try { > SolrServer server = createNewSolrServer(SOLR_URL2); > > SolrQuery query = new SolrQuery(); > query.setQuery(QUERY1); > QueryResponse qr = server.query(query); > SolrDocumentList sdl = qr.getResults(); > assertTrue(sdl.getNumFound() == 0); > > query = new SolrQuery(); > query.setQuery(QUERY2); > qr = server.query(query); > sdl = qr.getResults(); > assertTrue(sdl.getNumFound() > 0); > } catch (Exception ex) { > // expected > ex.printStackTrace(); > fail(); > } > } > > public void testDistrbutedSearch() { > try { > SolrServer server = createNewSolrServer(SOLR_URL1); > > SolrQuery query = new SolrQuery(); > query.setQuery(QUERY1); > > query.setParam(ShardParams.SHARDS, SOLR_SHARDS); > QueryResponse qr = server.query(query); > SolrDocumentList sdl = qr.getResults(); > assertTrue(sdl.getNumFound() > 0); > > SolrQuery query2 = new SolrQuery(); > query2.setQuery(QUERY2); > query2.setParam(ShardParams.SHARDS, SOLR_SHARDS); > QueryResponse qr2 = server.query(query); > SolrDocumentList sdl2 = qr2.getResults(); > assertTrue(sdl.getNumFound() > 0); > > } catch (Exception ex) { > ex.printStackTrace(); > fail(); > } > } > > public void testDistrbutedSearch2() { > try { > > SolrServer server = createNewSolrServer(SOLR_URL2); > > SolrQuery query = new SolrQuery(); > query.setQuery(QUERY1); > query.setParam(ShardParams.SHARDS, SOLR_SHARDS); > QueryResponse qr = server.query(query); > SolrDocumentList sdl = qr.getResults(); > assertTrue(sdl.getNumFound() > 0); > > query = new SolrQuery(); > query.setQuery(QUERY2); > query.setParam(ShardParams.SHARDS, SOLR_SHARDS); > qr = server.query(query); > sdl = qr.getResults(); > assertTrue(sdl.getNumFound() > 0); > } catch (Exception ex) { > // expected > ex.printStackTrace(); > fail(); > } > } > } >