solr数据导入的两种方法
数据一般都是来自数据库,而导入则有两种方式,一种是通过solr的管理页面和配置直接连接数据库,还有一种就是通过项目中代码操作(在这个项目中是用Mybatis将数据库中数据查出来之后再存到solr中)
如果~~你实在不想配置,没关系,在百度云中我上传了两个版本,solr-7.7.2-jetty是没有配置数据库链接的版本,solr-7.7.2-jetty-connectDB是配置了数据库链接的版本,里面均含有springboot-solr项目练手这个项目的实体类配置、和数据库中的数据,直接启动即可
链接:https://pan.baidu.com/s/1h2279pQZIDgCMLiP4DREbA
提取码:ziem
第一种:通过配置文件再管理页面导入
1.先建立个数据库,往里面加点数据。
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for info
-- ----------------------------
DROP TABLE IF EXISTS `info`;
CREATE TABLE `info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`qq` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33326 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of info
-- ----------------------------
INSERT INTO `info` VALUES ('1', 'tycoding', '123@qq.com', '8989723', 'sdhsh90');
INSERT INTO `info` VALUES ('2', 'tumo', 'tycoding@163.com', '8989723', 'tumo');
INSERT INTO `info` VALUES ('3', '涂陌', '123@163.com', '8989723', 'tycodingss');
INSERT INTO `info` VALUES ('4', '往吝', '992987642@qq.com', '992987642', '123456');
2.上maven仓库下一个mysql-connector的jar包。
找到solr-7.7.1/dist下的solr-dataimporthandler-7.7.1.jar,solr-dataimporthandler-extras-7.7.1.jar。一共是3个jar包。
把这三个jar包拷贝到solr-7.7.1/server/solr-webapp/webapp/WEB-INF/lib文件夹下
image.png
image.png
拷贝到:
image.png
3.修改solr-7.7.1/server/solr/new_core/conf/db-data-config.xml,注意账号密码与自己的数据库对应 <field column="username" name="item_username"/>中,column为数据库的列名,name为managed-schema中配置的field的name
image.png
image.png
<dataConfig>
<dataSource name="springboot_solr" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/springboot_solr" user="root" password="root" batchSize="-1" />
<document name="springboot_solr">
<entity name="info" pk="id" query="select * from info">
<field column="id" name="id"/>
<field column="username" name="item_username"/>
<field column="email" name="item_email"/>
<field column="qq" name="item_qq"/>
<field column="password" name="item_password"/>
</entity>
</document>
</dataConfig>
4.运行solr后到Dataimpot就可以看到配置文件了,没看到的点下展开就行,记得勾选下面的Auto-Refresh Status,否则需要自己去刷新状态看是否导入完成,到这里直接点Execute就行啦。出现Indexing completed就说明导入完成了。
如果只导入了一部分数据,有些字段没有导入,请看下你的配置文件的字段有没有写错
image.png
image.png
5.执行完毕后就可以去Query里点下Execute Query来看下数据进来没啦,关于这部分Query的使用我会单独开个文章讲。留个坑!
image.png
第二种,项目中代码操作加载数据(这种方式也被留在了项目展示的代码里,可以去github上下载,这里作简单介绍)。
1.首先就是要有对应的实体类和@Field注解,这个注解是为了当实体类与solr中配置的field名字不同的时候做映射。
image.png
2.创建一个Utils类,用来查出来mysql中的数据后并提交,其中searchMapper为Dao层,solrTemplate为spring封装的用来操作solr的对象,类似于redisTemplate。
这里不做配置性说明,需要的可以down下来的代码。
image.png
3.也是最重要的一步,因为这个项目是springboot项目,需要在项目启动的main方法里就执行这个SolrUtils里的操作,因此需要在启动时候获取到ApplicationContext,再通过getBean方法获取到里面注册的bean对象,再调用这个对象的方法来完成导入操作。
第二次运行就可以把导入的方法注释掉了,否则会重复导入
image.png