记录一次Spring Data Solr相关的错误解决
记录一次Spring Data Solr相关的错误解决
生活本不易,流人遂自安
相信大家也使用过SpringDataSolr,但是在最新版的SpringDataSolr 4.0.5 RELEASE中有些方法已经和以前的版本有些大不一样了。本次主要表达的是分组查询的不同。
问题描述
以前的分组查询是这样的:
- 创建分组对象,并设置查询条件
- 构建分组选项并且设置分组选项
- 获取分组页
- 获取分组结果对象
- 获取分组入口也groupEntries
- 从入口页中获取入口集合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这两个值,发现是可以设置值的,设置上继续跑起来,发现没有问题了!
另外需要注意的问题
- 最新的SpringDataSolr的一些方法参数好像也是有了变化的。redisTemplate.boundHashOps("value").get(template);这个方法的get参数需要是String的值,如果是Long类型的值,会发生类型转化的异常。
- 还有Solr高版本[7.x.x版本之后都不行了,前面的版本就不清楚了]开始动态字段的设置好像是不支持中文了
这样设置动态字段,如果Map的key是中文的话,存入Solr会被解析成"_"
网上好像没什么解决办法, 这个就先过一段时间再来解决。有知道的朋友希望不吝赐教!
欢迎指正,共同进步!
记录一次Spring Data Solr相关的错误解决的更多相关文章
- Spring Data Solr相关配置
1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</ ...
- Spring Data Solr —— 快速入门
Solr是基于Lucene(全文检索引擎)开发,它是一个独立系统,运行在Tomcat或Jetty(solr6以上集成了jetty,无需再部署到servlet容器上),但其原生中文的分词词功能不行,需要 ...
- Solr和Spring Data Solr
一.Solr概述与安装 1.Solr简介 Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的.Solr可以和Had ...
- Solr学习笔记(5)—— Spring Data Solr入门
一.Spring Data Solr简介 前面已经介绍了通过solrJ来操作solr,那么我们如何将Solr的应用集成到Spring中?Spring Data Solr就是为了方便Solr的开发所研制 ...
- Spring Data Solr操作solr的简单案例
Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便 ...
- SpringBoot整合Spring Data Solr
此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 <depe ...
- spring data solr 搜索关键字高亮显示
spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...
- Spring Data Solr
1.什么是spring data solr? Solr是一个开源搜索平台,用于构建搜索应用程序.简单的来说就是作为一个搜索引擎使用. 2.solr的安装(本地安装,远程安装同) 1)解压一个tomca ...
- Spring Data Solr教程(翻译) 开源的搜索服务器
Solr是一个使用开源的搜索服务器,它采用Lucene Core的索引和搜索功能构建,它可以用于几乎所有的编程语言实现可扩展的搜索引擎. Solr的虽然有很多优点,建立开发环境是不是其中之一.此博客条 ...
随机推荐
- 推荐一些优秀的SAP网站
著名的SAP论坛:(人气比较旺,可以找到很多问题的回答) http://www.sapfans.com/ 著名的It专业网站的SAP部分:(查找部分资料) http://sap.ittoolbox.c ...
- bzoj 3669: [Noi2014]魔法森林(并查集+LCT)
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- 线上CPU100%?看看这篇是怎么排查的!
前言 作为后端开发工程师,当收到线上服务器CPU负载过高告警时,你会这么做?重启服务,忽略告警?不过在我看来一个合格的工程师是一定要定位到具体问题所在的,从而 fix 它.下面记录一下线上服务器 CP ...
- P5108 仰望半月的夜空 SAM+线段树覆盖
$ \color{#0066ff}{ 题目描述 }$ 半月的夜空中,寄托了多少人与人之间的思念啊 曦月知道,这些思念会汇集成一个字符串\(S(n = |S|)\) 由于思念汇集的过于复杂,因此曦月希望 ...
- 大象——Thinking in UML
目录 大象--Thinking in UML 面向对象 普通民众的面向对象 大师眼中的面向对象 大象--Thinking in UML 大音希声,大象希形, 近来闲暇,随手翻起一些曾经看过的书籍,才发 ...
- HashSet存储过程中如何排除不同的自定义对象?
HashSet HashSet存储过程中如何排除不同的自定义对象? 先看一个小demo public class Demo1 { public static void main(String[] ar ...
- pyinstaller打包工具简单使用
python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件将可跨平台使用,那么怎么打包了,python提供了专门的模块:pyinstaller,下面就介绍下怎么用 1.安装 ...
- How to Deinstall Oracle Clusterware Home Manually
###sample 0:安装GI 和DB soft 都成功,如何回退DB soft [opdb@pdbdb01:/db/db/app/db/product/11204/deinstall]$ ./de ...
- MySQL数据库 InnoDB引擎 事务及行锁总结
一.事务 1.事务的四大特性 (1)原子性:事务开始后所有的操作要么一起成功,要么一起失败,整个事务是一个不可分割的整体. (2)一致性:是物开始前到结束后,数据库的完整性约束没有被破坏. (3)隔离 ...
- display和overflow
一.display <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...