欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据

程序员文章站 2022-07-08 09:43:51
...

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数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
第一处要改的是这个地方,修改成utf8。向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
第二处,每一列的编码方式都需要改一下。
向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
这样再导入就是正常显示的了。

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

导入成功。
向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据

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数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
将这三个放入你的core对应的lib之下。向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据

配置文件修改

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&amp;characterEncoding=utf-8&amp;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数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
第二步,找到这一块,加上箭头内容,根据自己的solr版本和实际情况略微修改。
向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
代码:????

  <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数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
点击Execute,等了3-5秒结果就出来了,如果一直没有就点refresh status。
向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
检验一下,去Query查询一下。
向MySQL数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据
导入成功!

可能出现的问题

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

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数据库表导入txt和csv文件数据 && 向Solr导入MySQL数据