向MySQL数据库表导入txt和csv文件数据 && Solr导入mysql数据
- 1.txt和csv文件导入mysql数据库
- 2.Solr导入mysql数据
- 新建一个core
- data-config.xml
- solrconfig.xml
- managed-schema
- 可能出现的问题
1.txt和csv文件导入mysql数据库
首先创建一个数据库表,我用的图形化可视界面是SQLyog(这个无所谓)。txt和csv是差不多的步骤。
CREATE TABLE shuyu (
id VARCHAR (100),
term VARCHAR (100),
Engname VARCHAR (200),
Def VARCHAR (255)
) ;
创建好表格之后导入你已经准备好的txt或csv文件。(注意:文件的第一行可以删去,表格创建的时候已经定义过表头了,不然会被当作数据导入)
LOAD DATA LOCAL INFILE 'F:\\shuili.txt'
INTO TABLE shuyu
CHARACTER SET utf8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';
FIELDS TERMINATED BY
是指你的这个txt文件使用什么来分隔的。LINES TERMINATED BY
是指换行符,txt默认是\r\n
。
这样运行一下就可以导入了。
其他tips:
1.如果导入出现warning,可以SHOW WARNINGS;
来看一下到底出了什么问题。
2.导入txt经常会出现乱码情况,在新建一个库表的时候很可能不是utf8格式的,可以手动转换一下。
选中你创建的表格-点击下图中这个按钮;
第一处要改的是这个地方,修改成utf8。
第二处,每一列的编码方式都需要改一下。
这样再导入就是正常显示的了。
附赠:
TRUNCATE TABLE shuyu;
上面这个语句是删除表内数据保留格式的意思。可以先删除数据再重新导入,如果标题乱码的话就把库表删除重建一下,注意修改编码方式。
导入成功。
2.Solr导入mysql数据
新建一个core
进入solr/bin下,新建core
solr create -c shuyu
这个core的名称就是shuyu,可以自行更改,运行完成后就可以看到F:\solr-7.7.3\solr-7.7.3\server\solr\shuyu多了一个文件夹。
前期准备
把三个jar包放入solr-7.7.3\server\solr\shuyu\lib中,分别是dist文件夹中的两个dataimport的jar包复制过去,还有一个是mysql的驱动文件(这个需要去网上下载)。
这里分分享一下我的mysql驱动jar——
链接:https://pan.baidu.com/s/1G6NmHzC2vWCDQfx09h7m5Q 提取码:v81c
将这三个放入你的core对应的lib之下。
配置文件修改
mysql中数据库表已经准备好了,下一步是将我们的数据存放进solr仓库中。
data-config.xml
在你的core的conf文件夹下新建data-config.xml
文件,里面写上你的数据相关配置。如我的上面shuyu这个库中的数据,展示我的data-config.xml
文件,就是最简单的一些内容。
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="shuyu" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mysql?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"
user="root"
batchSize="-1" />
<document>
<entity name="shuyu" query="select * from shuyu">
<field column="id" name="id" />
<field column="term" name="term" />
<field column="Engname" name="Engname" />
<field column="Def" name="Def" />
</entity>
</document>
</dataConfig>
我的数据库设置了没有密码的,如果有密码在root下面加一个password=“你的密码”
solrconfig.xml
data-config.xml写好了之后,要让系统知道它的路径,同样在你的core的conf文件夹底下打开solrconfig.xml。
第一步,加上下面内容。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
刚入门的同学如果不知道加在哪里,就直接加在最后一行的上面即可。
第二步,找到这一块,加上箭头内容,根据自己的solr版本和实际情况略微修改。
代码:👇
<lib dir="${solr.install.dir:../../solr-7.7.3}/contrib/dataimporthandler/" regex=".*\.jar" />
managed-schema
F:\solr-7.7.3\solr-7.7.3\server\solr\shuyu\conf\managed-schema下定义域,与solrconfig.xml中一一对应,要看一下id和name是否已经默认定义了,如果有的话不用重复写,会报错。
设置唯一主键id
<uniqueKey>id</uniqueKey>
定义你的域,根据你的数据库表实际情况,可以上去看一下我的数据库截图里面结构。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!-- docValues are enabled by default for long type so we don't need to index the version field -->
<field name="term" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="Engname" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="Def" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
要注意:id的类型type需要和_root_
一致,否则Solr Admin界面会加载不到core并报这个错误。
这样我们就配置好了,运行solr,选择你的core,导入数据。
这里的Entity就是你刚刚在dataConfig文件下entity设置的 name
点击Execute,等了3-5秒结果就出来了,如果一直没有就点refresh status。
检验一下,去Query查询一下。
导入成功!
可能出现的问题
导入数据有可能出现这样的情况
Requests: 1 1/s, Fetched: 1,823 1,823/s, Skipped: 0 , Processed: 0
查询的时候仍然是空的,说明数据没有被导入,一般问题出在data-config.xml和managed-schema这两个文件,是否多了空格和其他符号等;
另一个可能的原因,mysql数据库中的数据类型与你后来定义的不匹配,建议在MySQL中都定义成VARCHAR类型,这样在managed-schema就可以type=string,这样是不报错的;
还有一种原因,数据库中你的csv或者txt文件存在部分不规范的,导入的时候出错了,建议在MySQL中遍历一下表看一下是不是后面数据出错了,虽然导入了MySQL但是solr比较敏感就出错了。
如果仍然没有解决问题,可以去Logging里面看一下报错信息。