solr查询的NoSuchMethodError

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

     因而把solr开始集成进个人项目,结果出现问题:tomcat

  

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

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

     测试状况下solr查询参数:学习

    

     项目中引用solr查询状况:测试

    

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

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

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

     先删除掉转译的代码,Junit测试成功,可以成功查询出东西!对象

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

  

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

 

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

 

     项目更新,测试,成功!

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

相关文章
相关标签/搜索