Я пытаюсь обновить версию 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)
. Люди предложили мне использовать разбиение на страницы. Но я не могу позволить себе разбиение на страницы, так как на стороне пользовательского интерфейса будет слишком много изменений.
Есть еще один способ, с помощью которого я могу сначала запросить небольшое количество документов и получить общее количество документов, используя метод response.getResults().getNumFound()
, и попытаться установить это значение на метод setRows
, но этот подход увеличит еще один вызов сервера.
Есть ли другой способ решить эту проблему?