向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格式的,可以手动转换一下。

选中你创建的表格-点击下图中这个按钮;

mysql 从csv导入 非常慢 mysql数据库导入csv文件_乱码


第一处要改的是这个地方,修改成utf8。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_乱码_02


第二处,每一列的编码方式都需要改一下。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_乱码_03


这样再导入就是正常显示的了。

附赠:TRUNCATE TABLE shuyu; 上面这个语句是删除表内数据保留格式的意思。可以先删除数据再重新导入,如果标题乱码的话就把库表删除重建一下,注意修改编码方式。

导入成功。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_mysql_04

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

mysql 从csv导入 非常慢 mysql数据库导入csv文件_mysql 从csv导入 非常慢_05


将这三个放入你的core对应的lib之下。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_mysql 从csv导入 非常慢_06

配置文件修改

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>

刚入门的同学如果不知道加在哪里,就直接加在最后一行的上面即可。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_乱码_07


第二步,找到这一块,加上箭头内容,根据自己的solr版本和实际情况略微修改。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_mysql_08


代码:👇

<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

mysql 从csv导入 非常慢 mysql数据库导入csv文件_数据库_09


点击Execute,等了3-5秒结果就出来了,如果一直没有就点refresh status。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_mysql 从csv导入 非常慢_10


检验一下,去Query查询一下。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_数据库_11


导入成功!

可能出现的问题

导入数据有可能出现这样的情况

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里面看一下报错信息。

mysql 从csv导入 非常慢 mysql数据库导入csv文件_solr_12