记录一次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会被解析成"_"

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


欢迎指正,共同进步!

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

  1. Spring Data Solr相关配置

    1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</ ...

  2. Spring Data Solr —— 快速入门

    Solr是基于Lucene(全文检索引擎)开发,它是一个独立系统,运行在Tomcat或Jetty(solr6以上集成了jetty,无需再部署到servlet容器上),但其原生中文的分词词功能不行,需要 ...

  3. Solr和Spring Data Solr

    一.Solr概述与安装 1.Solr简介 Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的.Solr可以和Had ...

  4. Solr学习笔记(5)—— Spring Data Solr入门

    一.Spring Data Solr简介 前面已经介绍了通过solrJ来操作solr,那么我们如何将Solr的应用集成到Spring中?Spring Data Solr就是为了方便Solr的开发所研制 ...

  5. Spring Data Solr操作solr的简单案例

    Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便 ...

  6. SpringBoot整合Spring Data Solr

    此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 <depe ...

  7. spring data solr 搜索关键字高亮显示

    spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...

  8. Spring Data Solr

    1.什么是spring data solr? Solr是一个开源搜索平台,用于构建搜索应用程序.简单的来说就是作为一个搜索引擎使用. 2.solr的安装(本地安装,远程安装同) 1)解压一个tomca ...

  9. Spring Data Solr教程(翻译) 开源的搜索服务器

    Solr是一个使用开源的搜索服务器,它采用Lucene Core的索引和搜索功能构建,它可以用于几乎所有的编程语言实现可扩展的搜索引擎. Solr的虽然有很多优点,建立开发环境是不是其中之一.此博客条 ...

随机推荐

  1. python列表重复判断

    import random import string n = 0; while n<10: str_source = string.ascii_letters + string.digits ...

  2. Spring Boot 多数据源自动切换

    在Spring Boot中使用单数据源的配置很简单,我们简单回忆下:只需要在application.properties进行基本的连接配置,在pom.xml引入基本的依赖即可. 那么多数据源的原理呢? ...

  3. TCP和UDP的最完整的区别【转】

    来源:https://blog.csdn.net/li_ning_/article/details/52117463 TCP UDPTCP与UDP基本区别  1.基于连接与无连接  2.TCP要求系统 ...

  4. Struts2与easyui分页查询

    easyui里面分页查询:在easyui框架里面已经进行一些分装,所以我们只要进行后台分页查询即可 web.xml和struts.xml文件的配置的就不需要我多说了,和分页前代码一样,不需要更改: 需 ...

  5. Levenshtein字符串距离算法介绍

    Levenshtein字符串距离算法介绍 文/开发部 Dimmacro KMP完全匹配算法和 Levenshtein相似度匹配算法是模糊查找匹配字符串中最经典的算法,配合近期技术栏目关于算法的探讨,上 ...

  6. 低版本php对json的处理

    由于低版本php(php5以下)没有json_encode和json_decode 所以有下面函数实现 function json_encode($data) { switch ($type = ge ...

  7. 简明依赖注入(Dependency Injection)

    前言 这是因特奈特上面不知道第几万篇讲依赖注入(Dependency Injection)的文章,但是说明白的却寥寥无几,这篇文章尝试控制字数同时不做大多数. 首先,依赖注入的是一件很简单的事情. 为 ...

  8. How to stop UITableView from clipping UITableViewCell contents in iOS 7

    It looks like the view hierarchy changed slightly in ios7 for table view cells. You can try setting ...

  9. Saiku2.6 Saiku315 链接SQL的JDBC字符串

    Saiku26 type=OLAP name=CloudConn driver=mondrian.olap4j.MondrianOlap4jDriver location=jdbc:mondrian: ...

  10. 九校联考(DL24凉心模拟) 整除(中国剩余定理+原根性质)

    题意简述 给定 \(n, m\),求 \(n|x^m - x\) 在满足 \(x \in [1, n]\) 时合法的 \(x\) 的数量.答案模 \(998244353\).单个测试点包含多组数据. ...