Prasad
Prasad

Reputation: 61

Error in executing solr search query from a CloudSolrServer object

Here I am trying to fire a solr search query, I am using CloudSolrServer class to pass the zookeeper instance and then creating a instance of SolrQuery object for search.

        CloudSolrServer solr = new CloudSolrServer("HOST_NAME:PORT");

        System.out.println(solr.getZkStateReader());
        SolrQuery solrQuery = new SolrQuery();

        solrQuery.set("q", "abc");
        solrQuery.addFilterQuery("type:*");
        solrQuery.set("defType", "edismax");
        solrQuery.set("start", 0);
        solrQuery.set("rows", 10);
        solrQuery.set("qf", "name^10.0 description^5.0");
        solrQuery.addSortField("name_sort", SolrQuery.ORDER.asc);

        QueryResponse response = solr.query(solrQuery);

When I am running this I am getting this error:

null
org.apache.solr.client.solrj.SolrServerException: Error executing query
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:98)
    at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
    at SolrCloud_Example.main(SolrCloud_Example.java:40)
Caused by: java.lang.RuntimeException
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:115)
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:83)
    at org.apache.solr.common.cloud.ZkStateReader.<init>(ZkStateReader.java:138)
    at org.apache.solr.client.solrj.impl.CloudSolrServer.connect(CloudSolrServer.java:140)
    at org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:165)
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:90)
    ... 2 more

Could anyone help me on this issue?

Upvotes: 0

Views: 3962

Answers (2)

Tioma
Tioma

Reputation: 2150

I have faced with the same exception. In the result such connection is workable for me: CloudSolrServer solrServer = new CloudSolrServer("c-node3:2181/solr");

/solr in the end

Upvotes: 4

cahilltr
cahilltr

Reputation: 128

When using CloudSolrServer, you need to set the default collection value.

Also the CloudSolrServer query() method does not actually take SolrQuery as an argument; it takes SolrParams. You can create SolrParams from a named list, which SolrQuery can do.

So your code would look something like this:

CloudSolrServer solr = new CloudSolrServer("HOST_NAME:PORT");
solr.setDefaultCollection("your_collection");

SolrQuery solrQuery = new SolrQuery();

solrQuery.set("q", "abc");
solrQuery.addFilterQuery("type:*");
solrQuery.set("defType", "edismax");
solrQuery.set("start", 0);
solrQuery.set("rows", 10);
solrQuery.set("qf", "name^10.0 description^5.0");
solrQuery.addSortField("name_sort", SolrQuery.ORDER.asc);

SolrParams params = SolrParams.toSolrParams(solrQuery.toNamedList());
QueryResponse response = solr.query(params);

You can then use response to get back your results.

Upvotes: 1

Related Questions