Java 使用Solrj在Solr中获得所有结果

Java 使用Solrj在Solr中获得所有结果,java,solr,solrj,Java,Solr,Solrj,我想用solrj获得所有结果,我向Solr添加了10个文档,我没有得到任何异常,但如果我向Solr添加了10个以上的文档,我会得到异常。我搜索,我得到这个例外,在10文档的第一页,第11个文档转到第二页。我怎样才能得到所有的结果 String qry="*:*"; CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr"); QueryRe

我想用
solrj
获得所有结果,我向
Solr
添加了10个文档,我没有得到任何异常,但如果我向
Solr
添加了10个以上的文档,我会得到异常。我搜索,我得到这个例外,在10文档的第一页,第11个文档转到第二页。我怎样才能得到所有的结果

String qry="*:*";
                CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr");
      QueryResponse rsp=server.query(new SolrQuery(qry));
      SolrDocumentList docs=rsp.getResults();  
                        for(int i=0;i<docs.getNumFound();i++){

                            System.out.println(docs.get(i));                    
    }
String qry=“*:*”;
CommonHttpSolrServer服务器=新的CommonHttpSolrServer(“http://localhost:8983/solr");
QueryResponse rsp=server.query(新的SolrQuery(qry));
SolrDocumentList docs=rsp.getResults();

for(int i=0;inumFound)提供与查询匹配的结果总数

但是,默认情况下,Solr只返回由参数控制的前10个结果。
您正在尝试迭代numFound,但是由于返回的结果只有10,因此失败。
您应该使用rows参数进行迭代

要获得下一组结果,您需要使用不同的参数重新查询Solr。这是为了支持分页,这样您就不必一次提取所有结果,这是一个非常繁重的操作。

Integer start=0;
    Integer start = 0;

    query.setStart(start);
    QueryResponse response = server.query(query);
    SolrDocumentList rs = response.getResults();
    long numFound = rs.getNumFound();
    int current = 0;
    while (current < numFound) {

        ListIterator<SolrDocument> iter = rs.listIterator();
        while (iter.hasNext()) {
            current++;

            System.out.println("************************************************************** " + current + "   " + numFound);
            SolrDocument doc = iter.next();
            Map<String, Collection<Object>> values = doc.getFieldValuesMap();

            Iterator<String> names = doc.getFieldNames().iterator();
            while (names.hasNext()) {
                String name = names.next();
                System.out.print(name);
                System.out.print(" = ");

                Collection<Object> vals = values.get(name);
                Iterator<Object> valsIter = vals.iterator();
                while (valsIter.hasNext()) {
                    Object obj = valsIter.next();
                    System.out.println(obj.toString());
                }
            }
        }
        query.setStart(current);
        response = server.query(query);
        rs = response.getResults();
         numFound = rs.getNumFound();


    }
}
query.setStart(开始); QueryResponse response=server.query(查询); SolrDocumentList rs=response.getResults(); long numFound=rs.getNumFound(); int电流=0; while(当前
更简单的方法:

CloudSolrServer server = new CloudSolrServer(solrZKServerUrl);
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setRows(Integer.MAX_VALUE);
QueryResponse rsp;
rsp = server.query(query, METHOD.POST);
SolrDocumentList docs = rsp.getResults();
for (SolrDocument doc : docs) {
    Collection<String> fieldNames = doc.getFieldNames();
    for (String s: fieldNames) {
        System.out.println(doc.getFieldValue(s));
    }
}
CloudSolrServer服务器=新的CloudSolrServer(solrZKServerUrl);
SolrQuery query=新的SolrQuery();
query.setQuery(“*:*”);
query.setRows(整数.MAX_值);
询问应答rsp;
rsp=server.query(query,METHOD.POST);
SolrDocumentList docs=rsp.getResults();
对于(解决方案文档:文档){
集合字段名=doc.getFieldNames();
for(字符串s:字段名){
System.out.println(doc.getFieldValue);
}
}

如果你像这样重构代码,它会工作的

String qry="*:*";
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setRows(Integer.MAX_VALUE); //Add me to avoid IndexOutOfBoundExc
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr");
QueryResponse rsp=server.query(query);
SolrDocumentList docs=rsp.getResults();  
for(int i=0;i<docs.getNumFound();i++){
    System.out.println(docs.get(i));
            }
String qry=“*:*”;
SolrQuery query=新的SolrQuery();
query.setQuery(“*:*”);
query.setRows(Integer.MAX_VALUE);//添加我以避免IndexOutOfBoundExc
CommonHttpSolrServer服务器=新的CommonHttpSolrServer(“http://localhost:8983/solr");
QueryResponse rsp=server.query(查询);
SolrDocumentList docs=rsp.getResults();

对于(int i=0;iHello-欢迎使用StackOverflow!在回答的同时提供一些注释会很有帮助,以便更容易理解。Chen,尝试添加更多详细信息。LoudSolrServer已被弃用,请使用CloudSolrClient