有没有办法迭代Solrj响应,以便在迭代过程中逐步获取结果,而不是返回一个巨大的内存ArrayList?
或者我们必须诉诸于此:
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
int fetchSize = 1000;
query.setRows(fetchSize);
QueryResponse rsp = server.query(query);
long offset = 0;
long totalResults = rsp.getResults().getNumFound();
while (offset < totalResults)
{
query.setStart((int) offset); // requires an int? wtf?
query.setRows(fetchSize);
for (SolrDocument doc : server.query(query).getResults())
{
log.info((String) doc.getFieldValue("title"));
}
offset += fetchSize;
}
Run Code Online (Sandbox Code Playgroud)
虽然我是关于这个主题的,但为什么在返回时SolrQuery.setStart()需要一个?integerSolrDocumentList.getStart()/getNumFound()long
该代码看起来正确.您还可以将其包装在Iterator中,以便您的客户端代码不必知道有关底层分页的任何信息.
关于SolrQuery.setStart()要求整数,它肯定看起来很奇怪,我认为你是对的,它应该是一个很长的.尝试询问solr-user或lucene-dev邮件列表.