Solrj Select All

2019-09-03 11:35发布

问题:

I am having issues selecting everything in my 25 document Solr (3.6) index via Solrj (running Tomcat).

public static void main(String[] args) throws MalformedURLException, SolrServerException { 

        SolrServer solr = new HttpSolrServer("http://localhost:8080/solr");
        ModifiableSolrParams parameters = new ModifiableSolrParams();
        parameters.set("?q", "*:*");
        parameters.set("wt", "json");

        QueryResponse response = solr.query(parameters);
            System.out.println(response); 
    }

The result I get is:

{responseHeader={status=0,QTime=0,params={?q=*:*,wt=javabin,version=2}},response={numFound=0,start=0,docs=[]}}

Also, If I take the "?" out of parameters.set("?q", "*:*");I have to terminate the compilation or else it times out. The same happens if I replace the

"*:*"

with just

"*"

Also, I have tried parameters.set("qt", "/select");to no avail.

How do you select all and actually get results through Solrj?

回答1:

I am not sure why this works but after failing on a hundred ideas, this one took:

public static void main(String[] args) throws MalformedURLException, SolrServerException { 

        SolrServer solr = new HttpSolrServer("http://localhost:8080/solr");
        ModifiableSolrParams parameters = new ModifiableSolrParams();
          parameters.set("q", "*:*"); //query everything thanks to user1452132!
          parameters.set("facet", true);//without this I cant select all
          parameters.set("fl", "id");//send back just the id values
          parameters.set("wt", "json");//Id like this in json format please

        QueryResponse response = solr.query(parameters);
            System.out.println(response); 
    }

Hope this helps someone out there.



回答2:

You should be using "q" as the parameter and the following is the right syntax.

parameters.set("?q", "*:*");

The reason why it returns with "?q" is that there is no query to run, so it returns fast.

First, please test through the browser. You can also set the number of rows to return, so that you are not returning a large result set.

parameters.set("rows", 5);

Once solr query returns, you have to paginate through the results. If you had a large collection you wont be able to retrieve all of them in one go.



回答3:

I think you should try to also specify your core whenever you are referring to SolrServer object, i.e., write

SolrServer solr = new HttpSolrServer("http://localhost:8080/solr/collection1");

where collection1 is the name of the core that you want to use.



标签: solr lucene