首页 > 解决方案 > Pageable 不能为 null 在 Spring Data-Solr 中使用组功能时抛出异常

问题描述

使用 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 问题,所以不要认为我的配置中缺少任何内容。

以下是错误的堆栈跟踪片段。

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

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

谢谢,enter code here

标签: springspring-bootspring-data-solr

解决方案


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

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

我也有同样的问题并通过这样做解决。


推荐阅读