一、问题描述
最近计划将本站索引功能更换为基于Solr的搜索,想通过其配置DataImport功能将数据异步导入转换生成lucene索引文件,再通过Solr的搜索接口进行搜索,打开界面Entity框里面没有找到配置的subject实体,如下图所示,另“如何配置DataImport功能”参考更多其他页面
点击Configuration右边的Reload按钮,如下图
后台报出"ERROR org.apache.solr.core.SolrCore – org.apache.solr.handler.dataimport.DataImportHandlerException"异常,具体如下所示
157212 [http-9998-5] INFO org.apache.solr.handler.dataimport.DataImporter – Loading DIH Configuration: mysql-dsmconfig.xml@b@157216 [http-9998-5] ERROR org.apache.solr.core.SolrCore – org.apache.solr.handler.dataimport.DataImportHandlerException: Data Config problem: The reference to entity "characterEncoding" must end with the ';' delimiter.@b@ at org.apache.solr.handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:215)@b@ at org.apache.solr.handler.dataimport.DataImporter.maybeReloadConfiguration(DataImporter.java:130)@b@ at org.apache.solr.handler.dataimport.DataImportHandler.handleRequestBody(DataImportHandler.java:197)@b@ at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)@b@ at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)@b@ at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)@b@ at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)@b@ at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)@b@ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)@b@ at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)@b@ at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)@b@ at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)@b@ at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)@b@ at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)@b@ at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)@b@ at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)@b@ at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)@b@ at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)@b@ at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)@b@ at java.lang.Thread.run(Thread.java:745)@b@Caused by: org.xml.sax.SAXParseException; systemId: solrres:/mysql-dsmconfig.xml; lineNumber: 3; columnNumber: 128; The reference to entity "characterEncoding" must end with the ';' delimiter.@b@ at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)@b@ at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)@b@ at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)@b@ at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)@b@ at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)@b@ at org.apache.xerces.impl.XMLScanner.scanAttributeValue(Unknown Source)@b@ at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanAttribute(Unknown Source)@b@ at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)@b@ at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)@b@ at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)@b@ at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)@b@ at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)@b@ at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)@b@ at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)@b@ at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)@b@ at org.apache.solr.handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:206)@b@ ... 19 more@b@@b@157217 [http-9998-5] INFO org.apache.solr.core.SolrCore – [subject] webapp=/xwood-solr path=/dataimport params={command=reload-config&_=1469524614856} status=500 QTime=6 @b@157217 [http-9998-5] ERROR org.apache.solr.servlet.SolrDispatchFilter – null:org.apache.solr.handler.dataimport.DataImportHandlerException: Data Config problem: The reference to entity "characterEncoding" must end with the ';' delimiter.@b@ at org.apache.solr.handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:215)@b@ at org.apache.solr.handler.dataimport.DataImporter.maybeReloadConfiguration(DataImporter.java:130)@b@ at org.apache.solr.handler.dataimport.DataImportHandler.handleRequestBody(DataImportHandler.java:197)@b@ at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)@b@ at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)@b@ at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)@b@ at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)@b@ at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)@b@ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)@b@ at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)@b@ at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)@b@ at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)@b@ at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)@b@ at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)@b@ at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)@b@ at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)@b@ at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)@b@ at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)@b@ at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)@b@ at java.lang.Thread.run(Thread.java:745)@b@Caused by: org.xml.sax.SAXParseException; systemId: solrres:/mysql-dsmconfig.xml; lineNumber: 3; columnNumber: 128; The reference to entity "characterEncoding" must end with the ';' delimiter.@b@ at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)@b@ at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)@b@ at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)@b@ at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)@b@ at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)@b@ at org.apache.xerces.impl.XMLScanner.scanAttributeValue(Unknown Source)@b@ at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanAttribute(Unknown Source)@b@ at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)@b@ at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)@b@ at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)@b@ at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)@b@ at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)@b@ at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)@b@ at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)@b@ at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)@b@ at org.apache.solr.handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:206)
二、解决步骤
1. 根据日志异常定位是配置文件mysql-dsmconfig.xml引起的,错误关键词"characterEncoding",原来内容是如下
<?xml version="1.0" encoding="UTF-8" ?>@b@<dataConfig>@b@ <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8" user="root" password="root"/>@b@ <document>@b@ <entity name="subject" transformer="HTMLStripTransformer" query="select id,title,create_time,url,keywords,zhaiyao from pms_rep_view">@b@ <field name="id" column="id" />@b@ <field name="title" column="title" stripHTML="true"/>@b@ </entity>@b@ </document>@b@</dataConfig>
去除"?useUnicode=true&characterEncoding=utf-8",具体修改如下
<?xml version="1.0" encoding="UTF-8" ?>@b@<dataConfig>@b@ <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test" user="root" password="root"/>@b@ <document>@b@ <entity name="subject" transformer="HTMLStripTransformer" query="select id,title,create_time,url,keywords,zhaiyao from pms_rep_view">@b@ <field name="id" column="id" />@b@ <field name="title" column="title" stripHTML="true"/>@b@ </entity>@b@ </document>@b@</dataConfig>
2. 点击Reload按钮,重新刷新加载该mysql-dsmconfig.xml文件,问题解决了,如下图所示