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();
        }
    }
}

Reply via email to