IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    启动SolrCloud时出现SolrException,并且Ping功能不能使用的解决方案

    李阳发表于 2015-09-29 02:44:44
    love 0

    今天早晨启动本地搭建的SolrCloud时,发现tomcat报了一个错误,但是即使报错Tomcat还是可以启动,SolrCloud也能正常工作,但是绝不能容忍集群启动时会出现error的我,必须得搞定这个问题,指不定哪天就悲剧了,这个错误不会造成SolrCloud无法使用,但是会影响到SolrCloud的ping功能,点ping的时候会变成感叹号,不能使用,所以还是得解决滴,先把这个异常亮个相:

    12863 [searcherExecutor-7-thread-1] ERROR org.apache.solr.core.SolrCore  – org.apache.solr.common.SolrException: undefined field text
    	at org.apache.solr.schema.IndexSchema.getDynamicFieldType(IndexSchema.java:1269)
    	at org.apache.solr.schema.IndexSchema$SolrQueryAnalyzer.getWrappedAnalyzer(IndexSchema.java:434)
    	at org.apache.lucene.analysis.DelegatingAnalyzerWrapper$DelegatingReuseStrategy.getReusableComponents(DelegatingAnalyzerWrapper.java:74)
    	at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:175)
    	at org.apache.lucene.util.QueryBuilder.createFieldQuery(QueryBuilder.java:207)
    	at org.apache.solr.parser.SolrQueryParserBase.newFieldQuery(SolrQueryParserBase.java:374)
    	at org.apache.solr.parser.SolrQueryParserBase.getFieldQuery(SolrQueryParserBase.java:742)
    	at org.apache.solr.parser.SolrQueryParserBase.handleBareTokenQuery(SolrQueryParserBase.java:541)
    	at org.apache.solr.parser.QueryParser.Term(QueryParser.java:299)
    	at org.apache.solr.parser.QueryParser.Clause(QueryParser.java:185)
    	at org.apache.solr.parser.QueryParser.Query(QueryParser.java:107)
    	at org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:96)
    	at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:151)
    	at org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:50)
    	at org.apache.solr.search.QParser.getQuery(QParser.java:141)
    	at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:147)
    	at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:197)
    	at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    	at org.apache.solr.core.SolrCore.execute(SolrCore.java:1976)
    	at org.apache.solr.core.QuerySenderListener.newSearcher(QuerySenderListener.java:64)
    	at org.apache.solr.core.SolrCore$5.call(SolrCore.java:1748)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    	at java.lang.Thread.run(Thread.java:745)

    发现这个异常是undefined field text,有一个字段未定义,那么肯定是配置文件的问题,打开/root/solrcloud/configs/schema.xml,查找我定义的字段名称和字段属性,没发现有text这个字段呢?然后继续打开solrconfig.xml,发现有六处出现text,那么显然这两个配置文件肯定是导致这个错误的原因,于是去看了下这两个配置文件的含义,发现schema.xml中有一项是defaultSearchField,这个的值是text,然后就明白了,这里有个默认的搜索字段,如果什么都不选择,默认按照手机号搜索,那么既然这个报错了,那就改成其他的吧,这里我随便改了个字段:

    <defaultSearchField>mobile</defaultSearchField>

    然后在对应的solrconfig.xml中,修改如下:

    <requestHandler name="/select" class="solr.SearchHandler">
        <!-- default values for query parameters can be specified, these
             will be overridden by parameters in the request
          -->
         <lst name="defaults">
           <str name="echoParams">explicit</str>
           <int name="rows">10</int>
           <str name="df">mobile</str>
         </lst>
    </requestHandler>

    优先级:”/admin/ping”中的”df”属性 > “/select”中的”df”属性 > defaultSearchField

    “/admin/ping”中不配置”df”属性的话,就使用”/select”的”df”属性,即text字段,而text在schema.xml文件中未定义,导致出现异常。

    修改完成后,上传并覆盖原来的配置文件:

    java -classpath .:/root/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.1.3:2181,192.168.1.4:2181,192.168.1.5:2181 -confdir /root/solrcloud/configs/PCLoginLog/ -confname pcloginlog

    Reload一下SolrCloud的collection:

    curl 'http://192.168.1.4:8080/solr/admin/collections?action=RELOAD&name=pcloginlog'

    然后重新启动tomcat,发现不抱错了,而且Ping功能也能正常使用了。

    未经允许不得转载:李阳博客 » 启动SolrCloud时出现SolrException,并且Ping功能不能使用的解决方案



沪ICP备19023445号-2号
友情链接