Solr/SolrJ:如何迭代结果而不创建巨大的ArrayList
有没有一种方法可以迭代Solrj响应,从而在迭代过程中以增量方式获取结果,而不是在内存中返回一个巨大的Solr/SolrJ:如何迭代结果而不创建巨大的ArrayList,solr,solrj,Solr,Solrj,有没有一种方法可以迭代Solrj响应,从而在迭代过程中以增量方式获取结果,而不是在内存中返回一个巨大的ArrayList 还是我们必须求助于: SolrQuery query = new SolrQuery(); query.setQuery("*:*"); int fetchSize = 1000; query.setRows(fetchSize); QueryResponse rsp = server.query(query); long o
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 query=new SolrQuery();
query.setQuery(“*:*”);
int fetchSize=1000;
setRows(fetchSize);
QueryResponse rsp=server.query(查询);
长偏移=0;
long totalResults=rsp.getResults().getNumFound();
while(偏移量<总结果)
{
query.setStart((int)offset);//需要int?wtf?
setRows(fetchSize);
for(SolrDocument文档:server.query(query.getResults())
{
log.info((字符串)doc.getFieldValue(“title”);
}
偏移量+=取数大小;
}
当我谈到这个话题时,为什么
SolrQuery.setStart()
需要一个integer
,而SolrDocumentList.getStart()/getNumFound()
返回long
?这个代码看起来是正确的。您还可以将其包装在迭代器中,这样您的客户机代码就不必知道任何有关底层分页的信息
关于
SolrQuery.setStart()
需要一个整数,它看起来确实很奇怪,我认为你是对的,它也应该是一个长的。试着在搜索列表或邮件列表上提问。咖啡因的原因是Solr旨在为您提供前X个搜索结果。我们的期望是,您将有一个“合理”的数字返回。如果Solr必须深入查看搜索结果(数千个),那么你就是在摸索Solr的设计初衷。这会起作用,但查询响应将以指数级的速度变慢,并且随着搜索结果的深入,速度会越来越慢。
但是,是否有可能?是否有可能以有效的方式进行深度分页?是的,一旦我链接的问题得到解决。