有没有一种方法可以迭代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;
}
当我在讨论该主题时,为什么
SolrQuery.setStart()
需要integer
,而SolrDocumentList.getStart()/getNumFound()
返回long
呢? 最佳答案
该代码看起来正确。您还可以将其包装在Iterator中,以便您的客户端代码不必了解有关基础分页的任何信息。
关于需要整数的SolrQuery.setStart()
,看起来确实很奇怪,我认为您是对的,而且应该很长。尝试询问solr-user或lucene-dev邮件列表。
关于Solr/SolrJ : how to iterate results without creating a giant ArrayList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5051460/