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