Pageable 不能为 null 在 Spring Data-Solr 中使用组功能时抛出异常

Posted

技术标签:

【中文标题】Pageable 不能为 null 在 Spring Data-Solr 中使用组功能时抛出异常【英文标题】:Pageable must not be null Exception thrown when using group functionality in Spring Data-Solr 【发布时间】:2019-10-16 15:19:27 【问题描述】:

使用 springboot data-solr 和 SolrTemplate 的文档示例通过查询创建组时,我收到结果但没有分组信息。查看示例代码时:

Field field = new SimpleField("popularity");
Function func = ExistsFunction.exists("description");
Query query = new SimpleQuery("inStock:true");

SimpleQuery groupQuery = new SimpleQuery(new SimpleStringCriteria("*:*"));
GroupOptions groupOptions = new GroupOptions()
    .addGroupByField(field)
    .addGroupByFunction(func)
    .addGroupByQuery(query);
groupQuery.setGroupOptions(groupOptions);

GroupPage<Product> page = solrTemplate.queryForGroupPage("collection-1", query, Product.class);

GroupResult<Product> fieldGroup = page.getGroupResult(field);
GroupResult<Product> funcGroup = page.getGroupResult(func);
GroupResult<Product> queryGroup = page.getGroupResult(query);

似乎创建了一个组查询,但是对 queryForGroupPage 的调用没有使用它,这可以解释为什么我没有收到任何分组信息。如果我改为将 groupQuery 对象传递给调用,那么我会收到“页面不能为空”错误。

我已经测试了其他查询类型并且没有出现这个错误,所以它似乎只是影响了我的这个功能。我曾尝试使用较旧的 springboot 版本和较旧的 Solr 版本,将两者匹配,并且会发生同样的问题。

我在设置方面没有任何其他 Solr 问题,所以不要认为我的配置中缺少任何内容。

以下是错误堆栈跟踪的 sn-p。

11:15:14,323 错误 [stderr](默认任务 1)java.lang.IllegalArgumentException:Pageable 不能为空! 11:15:14,325 错误 [stderr](默认任务 1)在 org.springframework.util.Assert.notNull(Assert.java:198) 11:15:14,326 错误 [stderr](默认任务 1)在 org.springframework.data.domain.Chunk.(Chunk.java:54) 11:15:14,327 错误 [stderr](默认任务 1)在 org.springframework.data.domain.PageImpl.(PageImpl.java:46) org.springframework.data.solr.core.ResultHelper.convertGroupQueryResponseToGroupResultMap(ResultHelper.java:306) 的 11:15:14,328 错误 [stderr](默认任务 1) org.springframework.data.solr.core.SolrTemplate.createSolrResultPage(SolrTemplate.java:448) 的 11:15:14,329 错误 [stderr](默认任务 1) 11:15:14,330 org.springframework.data.solr.core.SolrTemplate.doQueryForPage(SolrTemplate.java:305) 处的错误 [stderr](默认任务 1) 11:15:14,330 org.springframework.data.solr.core.SolrTemplate.queryForGroupPage(SolrTemplate.java:357) 处的错误 [stderr](默认任务 1) 11:15:14,331 org.springframework.data.solr.core.SolrTemplate.queryForGroupPage(SolrTemplate.java:346) 处的错误 [stderr](默认任务 1) ...

有人看过按功能分组的工作示例吗?我也搜索了任何东西,但在官方文档的示例代码之外找不到参考。

谢谢,enter code here

【问题讨论】:

嘿,你找到解决这个问题的方法了吗?另外,我也有同样的问题。 @DarrenP 同样的问题。你能找出问题所在吗? 【参考方案1】:

我想我解决了这个问题。您应该设置 GroupOptions 限制。示例代码如下。

GroupOptions groupOptions = new GroupOptions()
.addGroupByField(field)
.addGroupByFunction(func)
.addGroupByQuery(query)
.setLimit(1000);
groupQuery.setGroupOptions(groupOptions);

我也遇到了同样的问题,通过这样做解决了。

【讨论】:

以上是关于Pageable 不能为 null 在 Spring Data-Solr 中使用组功能时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

JPA findAll Pageable Request Total Count Group By Column

解决 Webflux 中的 Pageable

Junit mockito 测试Controller层方法有Pageable异常

SwiftUI:如何在 Pageable 中访问 ObservedObject?

在使用 Pageable 访问值问题之前调用“Optional#isPresent()”

Spring Boot集成Swagger的Pageable参数问题