solr查询的NoSuchMethodError

     项目中有一个根据文档内容查询出文档的需求,于是开始学习solr。总的流程基本上是这样:原理学习-solr服务器搭建-中文分词配置-添加索引-测试查询,虽说也经历了一些波折,但问题总是很快就被解决,一切还算顺利。

     于是把solr开始集成进我的项目,结果出现问题:

  

     怎么回事,此方法JUnit测试都没有问题,既然测试没有错,证明错误一定不是部署的solr服务的问题,问题一定出在本地,重新检查一遍solr查询的方法,Debug发现问题出现在此句:

     继续思考:为什么测试的时候成功了,此方法放进tomcat中就出现问题了,一定是tomcat的原因,于是debug中查看测试与部署情况下不一样的地方;别说,还真让我找到了不同点:

     测试情况下solr查询参数:

    

     项目中引用solr查询情况:

    

     项目中使用时,set进SolrQuery对象乱码!嘿嘿,好开心,问题找到了,一定是项目部署的tomcat字符集问题,查看tomcat字符集,发现已经设置为UTF-8,咋回事?

     既然tomcat是好的,那我在代码中给你进行转译:String keywords = ClientUtils.escapeQueryChars(kw),利用此方法将特殊字符进行转译后加入solrQuery。测试,还不对,还是NoSuchMethodError。

     是不是我转译的不对啊?用JUnit测试类测试一下,没有报错,但也没有查询到任何东西,返回response为null。看来代码转译特殊字符后在提交这一个思路有问题,不仅没项目中solr不对,连测试都查不出东西。

     先删除掉转译的代码,Junit测试成功,能够成功查询出东西!

     测试的时候转译后的URl查不到东西,最多response为null,但也没报NoSuchMethodError。难道不是因为特殊字符转译的问题?进行验证测试,拿出项目Solr查询的url用浏览器直接查询:

  

     没有问题,可以查询出内容,看来之前的思路错了,不是这一块的问题。重新回到问题本身:NoSuchMethodError。找不到这个方法:要么没有此方法的所在类,要么此方法的所在类没有这个这个方法。测试的时候都可以,说明这个类肯定存在;放进tomat中为什么不行呢,难道说tomcat中有两个此类,一个有toQueryString方法,一个没有此方法,在eclipse中查看:

 

    果然有两MapSolrParams类,一个在solr-common-1.3.0 ,一个在solr-solrj-5.5.4,pom文件中注释掉一个试一下:

 

     项目更新,测试,成功!

     反思:问题出现的时候,没有直接从问题的本质出发去思考,反而舍本逐末,一直在找测试情况与项目部署情况的不同,浪费了太多时间。

 

转载于:https://www.cnblogs.com/crazyape/p/10138669.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值