Solr/SolrJ : how to iterate results without creating a giant ArrayList

标签 solr solrj

有没有办法迭代 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/

相关文章:

solr - 如何禁用 solr 管理页面

join - Solr - 阻止具有许多子约束的父查询

java - Apache Solr 文件未建立索引或 "uploaded"

java - Solr 8.1启动错误-maxBooleanClauses

java - 如何使用 SolrPing 检查 Solr 状态

solr - Solr错误此索引模式不可变

solr - 将 solr 从 5.2 升级到 8.2 时收到有关分词器版本的警告消息

java - 使用 Solr/Lucene 作为持久化技术

java - 在 Apache Solr 中对 CSV 文件中的数据建立索引

java - Solr 不区分大小写的查询