【发布时间】:2015-08-17 09:18:18
【问题描述】:
我正在尝试将我的 Solr 4.x 版本升级到 5.2.1 Solrcloud 实施。我编写了以下代码来获取 Sorl 查询的所有结果,这在 Solr 单实例模式下运行良好。
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.addSort("agent_status", ORDER.desc);
query.addFilterQuery("account_id:\"" + accountId + "\"");
query.set("rows", Integer.MAX_VALUE);
但代码在 SolrCloud 实现中无法正常工作。它会引发以下异常。
2015-08-14 16:44:45,648 ERROR [solr.core.SolrCore] - [http-8080-8] : java.lang.NegativeArraySizeException
at org.apache.lucene.util.PriorityQueue.<init>(PriorityQueue.java:58)
at org.apache.lucene.util.PriorityQueue.<init>(PriorityQueue.java:39)
at org.apache.solr.handler.component.ShardFieldSortedHitQueue.<init>(ShardDoc.java:113)
at org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:972)
at org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:750)
at org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:729)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:388)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143)
我发现它因为query.set("rows", Integer.MAX_VALUE) 声明而失败。人们建议我使用分页。
但是,我不能做分页,因为在 UI 方面会有太多的变化。
还有另一种方法,我可以先用一些小数字查询并使用response.getResults().getNumFound() 方法获取文档总数,然后尝试将该值设置为setRows 方法。但是这种方法会增加对服务器的一次调用。
有没有其他方法可以解决这个问题?
【问题讨论】:
标签: solr solrj solrnet solrcloud