数据库导入数据
生产环境下咱们个别须要从数据库中导入数据。
筹备测试数据
建一个solrtest的表
CREATE TABLE `solrtest` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) DEFAULT NULL COMMENT '姓名', `age` tinyint(3) DEFAULT NULL COMMENT '年龄', `description` varchar(1000) DEFAULT NULL COMMENT '介绍', `createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立工夫', `updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新工夫', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
导入几条数据
insert into `solrtest`(`id`,`name`,`age`,`description`,`createTime`,`updateTime`) values (1,'张三',21,'大家好,欢送大家来到这里','2022-09-26 10:23:21','2022-09-26 10:23:24'),(2,'李四',22,'欢送欢送','2022-09-26 10:23:27','2022-09-26 10:23:29'),(3,'王五',23,'热烈欢迎','2022-09-26 10:23:37','2022-09-26 10:23:39');
配置导入处理器
官网文档上说,数据导入处理器9.0就会移除。这个性能将被合并到第三方插件dataimporthandler中。
The Data Import Handler is deprecated and will be removed in 9.0.
This functionality is being migrated to a new 3rd party plugin available at https://github.com/rohitbemax...
See the section Package Manager for information about Solr’s plugin framework.
—— 以上内容摘自官网文档:https://solr.apache.org/guide...
在solrconfig.xml
中存在一些requestHandler
,首先查看solrconfig.xml
中是否存在名字为dataimport
的requestHandler
。
通过查问,如果没有发现名字为dataimport
的requestHandler
,则须要手动增加。为了当前便于保护此文件,咱们就在requestHandler最初,约为1296行处,增加如下内容:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst></requestHandler>
配置数据库导入文件
而后配置db-data-config.xml
文件,上面以mysql
为例,将mysql
的jar
包增加到server\solr-webapp\webapp\WEB-INF\lib
目录或server\lib\ext
目录下,留神先创立对应的表。
其中updateTimestamp
为timeStamp
格局的字段,name字段转换为solr中的dd字段。
~$ cd solr-8.11.2/server/solr/mytest/conf~$ touch db-data-config.xml
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test" user="root" password="123" /> <document> <!-- deltaQuery返回值为id即${dih.delta.id}中的id,这两处名称须要统一 --> <entity name="test" pk="id" query="select id,name as dd,age,description,createTime,updateTime from solrtest" deltaImportQuery="select id,name as dd from solrtest where id='${dih.delta.id}'" deltaQuery="select id from solrtest where updateTimestamp > STR_TO_DATE('${dih.last_index_time}','%Y-%m-%d %T')"> <!-- name字段转换为solr中的dd字段 --> <field column="name" name="dd"/> </entity> </document></dataConfig>
- query是获取全副数据的SQL
- deltaImportQuery是获取增量数据时应用的SQL
- deltaQuery是获取pk的SQL
parentDeltaQuery是获取父Entity的pk的SQL
在conf文件夹下有个dataimport.properties文件,用来记录每个表(entity)索引最初更新的工夫。
Mon Sep 26 12:10:14 CST 2022
test.last_index_time=2022-09-26 12\:10\:13
last_index_time=2022-09-26 12\:10\:13
${dih.last_index_time} 能够在deltaQuery语句中应用,DIH(DataImportHandler)
这里须要留神的是tinyint(1)
类型的字段导入时默认会转换为boolean类型的,这时须要应用mysql的convert(columnName,SIGNED)
函数进行解决,其中第一个参数为须要转换的列,第2个参数为转换成的类型,这里应用SIGNED
意思为整型
增加jar包
把用到的数据库驱动jar包(jdbc,本人筹备)放到server/solr-webapp/webapp/WEB-INF/lib目录下,我这里用的是mysql-connector-java-8.0.29.jar
复制jar包
~$ cp solr-8.11.2~$ cp dist/solr-dataimporthandler-8.11.2.jar server/solr-webapp/webapp/WEB-INF/lib
重启solr,而后就能够导入数据了
导入数据
执行胜利后能够查问到
能够看到右侧曾经有数据了。
参考文档
- 官网文档