记录一次Spring Data Solr相关的错误解决

记录一次Spring Data Solr相关的错误解决

生活本不易,流人遂自安

相信大家也使用过SpringDataSolr,但是在最新版的SpringDataSolr 4.0.5 RELEASE中有些方法已经和以前的版本有些大不一样了。本次主要表达的是分组查询的不同。

问题描述

以前的分组查询是这样的:

  1. 创建分组对象,并设置查询条件
  2. 构建分组选项并且设置分组选项
  3. 获取分组页
  4. 获取分组结果对象
  5. 获取分组入口也groupEntries
  6. 从入口页中获取入口集合getContent

如果你按照这种设置的话,那么你会发现有如下错误:java.lang.IllegalArgumentException: Pageable must not be null!

错误描述的页很清晰,就是Pageable不能为空。但是改如何去解决呢,博主开始也是baidu、Google了一波,但是发现网上的相关问题实在是太少了,没有什么有价值的,最后只能自己去跟踪错误然后寻找了。

问题的跟踪与解决

首先在相应的地方打上断点,错误往下会找到出错的行数,就是在 solrTemplate.queryForGroupPage这个方法上报的错。打上断点进去查看。既然是Pageable的问题,那么肯定是跟page有关,留心!前面的逻辑主要是去创建page,途中查看Debugger可以看到response已经获得了,在doQueryForPage的时候已经从solr当中查询到了并返回数据,查看值也是自己预期的值,那么说明并不是solr那边的错误。继续,当走到createSolrResultPage方法时,走完一遍过程便会发现错误在哪里

主要是创建page对象的时候设置setGroupResults出错,继续跟进去convertGroupQueryResponseToGroupResultMap这个方法,这个方法应该是对返回的response值封装成Map。此方法前面是将返回的response值进行循环设值之类的,一般没有问题。

看到设置page值的时候了,跟进去看看。第二个参数是获取返回的request的方法。

进去可以看到是GroupOptions的class,也就是我们前面设置分组选项的类,此处的方法是判断limit和offset是否为空,这个相信在MySQL中的分组查询中很熟悉了,但是我们没有设置过limit和offset的值,此处肯定返回null。这就有问题了,返回到上一个new PageImpl的时候,点进去方法查看构造函数

注意前面传进来的第二个参数为null,此处掉用父类构造函数,继续点进去查看

可以看到此处就是错误发生的地点了,知道了错误所在就好办了。此处的null值我们前面看到是在GroupOptions的class中判断的,由此可以推断是GroupOptions没有设置limit和offset的值导致的。返回到前面设置的地方去groupOptions.setXXX这两个值,发现是可以设置值的,设置上继续跑起来,发现没有问题了!

另外需要注意的问题

  1. 最新的SpringDataSolr的一些方法参数好像也是有了变化的。redisTemplate.boundHashOps("value").get(template);这个方法的get参数需要是String的值,如果是Long类型的值,会发生类型转化的异常。
  2. 还有Solr高版本[7.x.x版本之后都不行了,前面的版本就不清楚了]开始动态字段的设置好像是不支持中文了

这样设置动态字段,如果Map的key是中文的话,存入Solr会被解析成"_"

网上好像没什么解决办法, 这个就先过一段时间再来解决。有知道的朋友希望不吝赐教!



欢迎指正,共同进步!

原文地址:https://www.cnblogs.com/MarchApril/p/10660363.html

时间: 2024-08-14 22:29:52

记录一次Spring Data Solr相关的错误解决的相关文章

Spring Data Solr相关配置

1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</id> <name>Spring Milestone Maven Repository</name> <url>http://repo.springsource.org/libs-milestone</url> </repository> &l

SpringBoot整合Spring Data Solr

此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId></dependency> 2.

spring data solr 使用内嵌Solr服务器(单核)

1.如何在开发环境下配置spring datasolr来使用嵌入式Solr Server 可以根据官方给出的案例项目(spring-data-book),找到带有Embedded的类,即是使用嵌入式的solrServer,优点:不用自己配置环境,就可以学习使用spring data solr,注意:在该类中,被@after注解的函数内,包含删除数据并关闭EmbeddedSolrServer. 2.创建一个嵌入式SolrServer 很简单,先在官网上下载源码:spring-data-solr-m

记录分享公司Spring data相关配置

起因 公司Spring Data相关的配置还是有点意思的,不过蛮复杂的...XML很多...我不太喜欢强行记住....所以我打算记录一下配置的大致思路和结构,以后可能会有用.... 总体结构 总体结构大致就是这样..Spring/data这个文件夹主要配置Spring Data相关的配置. data下主要有2个文件夹:datasource和module,还有一些其他的XML和properties XML和properties data-context.xml <import resource=&qu

spring Data solr依赖文件 和xml配置文件

<dependencies>        <dependency>            <groupId>org.springframework.data</groupId>            <artifactId>spring-data-solr</artifactId>            <version>1.5.5.RELEASE</version>        </dependen

Spring Data JPA的低级错误

1 //课程表 2 @Entity 3 public class Class { 4 @GeneratedValue(strategy = GenerationType.AUTO) 5 @Id 6 private Long classID;// 课程编号 varchar(20) not null, 7 private String className;// 课程名称 varchar(50), 8 @Temporal(TemporalType.DATE)//(精确到年月日) 9 private D

记录apache的安装过程中的一些错误解决方式

安装过多次APACHE,每次安装都会发生一些错误,按着错误一搜,跟着解决方案一步一步就解决了.当然有一些解决方案是坑人的 =.= 这次想想还是把过程记录一下,以防下次使用时有过往成功的记录可查,省的再去找了. APR  not found #  cd /opt #  wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz #  tar -zxf apr-1.4.5.tar.gz #  cd  apr-1.4.5 #  ./configur

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决

这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据,当然也不会修改数据4 MODIFIES SQL DATA 要修改数据5 CONTAINS SQL 包含了SQL语句 其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持.如果我们开启了 bin-log, 我们就必须为我们的funct

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法

这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据,当然也不会修改数据4 MODIFIES SQL DATA 要修改数据5 CONTAINS SQL 包含了SQL语句 其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持.如果我们开启了 bin-log, 我们就必须为我们的funct