出于对分词兴趣,研究下solr,遇到以下这个问题:
Dockerfile
FROM solr:7.5.0
WORKDIR /opt/solr/server/solr
RUN mkdir test \
&& cp /opt/solr/dist/solr-dataimporthandler-7.5.0.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib \
&& cp /opt/solr/dist/solr-dataimporthandler-extras-7.5.0.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
COPY mysql-connector-java-8.0.14.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
WORKDIR /opt/solr/server/solr/test
RUN echo 'name=test' > core.properties
RUN mkdir data
RUN cp -r ../configsets/_default/conf/ .
WORKDIR /opt/solr/server/solr/test/conf
ADD db-data-config.xml .
ADD solrconfig.xml .
ADD managed-schema .
EXPOSE 8983
solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
managed-schema
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="str" type="string" indexed="true" stored="false" />
<field name="str1" type="string" indexed="true" stored="false" />
db-data-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource
type="JdbcDataSource"
name="source1"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/test"
user="root"
password="mi"
batchSize="-1" />
<document>
<entity
name="test"
dataSource="source1"
query="select * from test"
>
<field column="id" name="id" />
<field column="str" name="str" />
<field column="str1" name="str1" />
</entity>
</document>
</dataConfig>
数据库在宿主机上
看错误是没连接上mysql,想问下哪部出错呢。
点击全部导入报错
Exception while processing: test document : SolrInputDocument(fields: []):org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from test Processing Document # 1
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:69)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:327)
at org.apache.solr.handler.dataimport.JdbcDataSource.createResultSetIterator(JdbcDataSource.java:288)
at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:283)
at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:52)
at org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:59)
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:73)
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:267)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:476)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:415)
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:330)
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:233)
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:424)
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:483)
at org.apache.solr.handler.dataimport.DataImporter.lambda$runAsync$0(DataImporter.java:466)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
docker
中的127.0.0.1
和主机中的是不一样的,所以访问不了mysql
导致,你可以设置--network host
,这个在macOS
中是不起做用,建议设置宿主机host.docker.internal
访问(18.03后支持),或者mysql也用docker,通过docker网络连接。