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

use*_*527 3 java solr solrj

我想得到所有结果solrj,我添加10个文件Solr,我没有得到任何异常,但如果我添加10个以上的文档,Solr我会得到异常.我搜索了这个,我在第一页的http:// localhost:8983/solr/browse 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));                    
    }
Run Code Online (Sandbox Code Playgroud)

线程"AWT-EventQueue-0"中的异常java.lang.IndexOutOfBoundsException:索引:10,大小:10

小智 8

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


    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您好 - 欢迎来到StackOverflow!有一些评论和答案是有帮助的,这样更容易理解. (2认同)

Che*_*Lun 7

更简单的方法:

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 陈,尝试添加更多细节 (2认同)

Jay*_*dra 5

numFound为您提供与Query匹配的结果总数.

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

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