Solr结构化数据导入简介
Solr支持从关系数据库、基于http的数据源(如RSS和ATOM提要)、电子邮件存储库和结构化XML中索引内容。这里介绍从关系型数据库Mysql导入数据。
solr自动帮我们从数据库中导入数据进行索引,支持全量和增量两种方式。
怎么配置
1.需要在solrconfig.xml配置一个requestHandler,通过发出http请求来触发,这个requestHander称为Data import Handler (DIH)
db-data-config.xml
dih-data-config.xml配置文件可在目录下:example\example-DIH\solr\db\conf\db-data-config.xml拷贝。
配置文件可以是绝对路径、或相对集合conf/的相对路径。
2.DataImportHandler这个类所在jar并没有包含在类目录中,我们需要在solrconfig.xml中引入这个jar。
3.配置数据源
配置数据源,先看几个概念。
dataSource:数据源,定义从哪取数据。
entity:实体,表示取出的数据。
processor:处理器,执行数据加载。
transformer:转换器,执行数据处理。
field:定义实体中的列与模式字段的对应。
字段对应规则说明:
自动进行名字相同配对;对于名字不同的通过显式配置 field的column、name属性指定编辑之前的拷贝的配置文件:db-data-config.xml
配置数据源,单数据源:
多数据源:
配置自己账号和密码,url。
serverTimezone=GMT是为解决引入最新版mysql驱动jar报时区错误而加入的连接请求参数。
4.拷贝mysql的驱动jar包到solr中
5.导入测试数据
create table t_product(prod_id varchar(64) PRIMARY key,name varchar(200) not null,simple_intro LONGTEXT,price bigint,uptime datetime,brand_id varchar(64),last_modify_time datetime);create table t_brand(id varchar(64) PRIMARY key,name varchar(200) not null,last_modify_time datetime);create table t_cat(id varchar(64) PRIMARY key,name varchar(200) not null,last_modify_time datetime);create table t_prod_cat(prod_id varchar(64),cat_id varchar(64) ,last_modify_time datetime);INSERT INTO t_brand VALUES ('b01', '华为', '2018-5-17 00:00:00');INSERT INTO t_brand VALUES ('b02', '戴尔', '2018-5-18 00:00:00');INSERT INTO t_cat VALUES ('c01', '台式机', '2018-5-17 00:00:00');INSERT INTO t_cat VALUES ('c02', '服务器', '2018-5-17 00:00:00');INSERT INTO t_product VALUES ('tp001', '华为(HUAWEI)RH2288HV3服务器', '12盘(2*E5-2630V4 ,4*16GB ,SR430 1G,8*2TSATA,4*GE,2*460W电源,滑轨) ', 4699900, '2018-5-8 00:00:00', 'b01', '2018-5-8 00:00:00');INSERT INTO t_product VALUES ('tp002', '戴尔 DELL R730 2U机架式服务器', '戴尔 DELL R730 2U机架式服务器(E5-2620V4*2/16G*2/2T SAS*2热/H730-1G缓存/DVDRW/750W双电/导轨)三年', 2439900, '2018-5-18 15:32:13', 'b02', '2018-5-18 17:32:23');INSERT INTO t_prod_cat VALUES ('tp001', 'c01', '2018-5-8 14:48:56');INSERT INTO t_prod_cat VALUES ('tp001', 'c02', '2018-5-8 14:49:15');INSERT INTO t_prod_cat VALUES ('tp002', 'c01', '2018-5-18 15:32:48');INSERT INTO t_prod_cat VALUES ('tp002', 'c02', '2018-5-18 18:29:23');
t_product:商品主表
t_brand:商品品牌表
t_cat:商品类别表
t_prod_cat:商品表和商品类别的关联表
6.配置db-data-config.xml的其他属性
以下是从example拷贝的官方自带的例子:
下可包含一个或多个 数据实体
entity 数据实体通用属性说明:
name (required) : 标识实体的唯一名processor : 当数据源是非RDBMS 时,必须指定处理器。(默认是SqlEntityProcessor)transformer : 要应用在该实体上的转换器。dataSource : 当配置了多个数据源时,指定使用的数据源的名字。pk : 实体的主键列名。只有在增量导入时才需要指定主键列名。和模式中的唯一键是两个不同的东西。rootEntity : 默认document元素的子entity是rootEntity,如果把rootEntity属性设为false值,则它的子会被作为rootEntity(依次类推)。rootEntity返回的每一行会创建一个document。onError : (abort|skip|continue) . 当处理entity的行为document的过程中发生异常该如何处理:默认是 abort,放弃导入。skip:跳过这个文档,continue:继续索引该文档。preImportDeleteQuery : 在全量导入前,如需要进行索引清理cleanup,可以通过此属性指定一个清理的索引删除查询,否则用的是‘*:*’(删除所有)。只有的直接子Entity设置此属性有效。postImportDeleteQuery : 指定全量导入后需要进行索引清理的delete查询。只有的直接子Entity设置此属性有效.SqlEntityProcessor 的 entity 属性说明:
query (required) : 从数据库中加载实体数据用的SQL语句。deltaQuery : 仅用于增量导入,指定增量数据pk的查询SQL。parentDeltaQuery : 指定增量关联父实体的pk的查询SQL。deletedPkQuery :仅用于增量导入,被删除实体的pk查询SQL。deltaImportQuery : (仅用于增量导入) .指定增量导入实体数据的查询SQL。如果没有指定该查询语句,solr将使用query属性指定的语句,经修改后来查询加载增量数据(这很容易出错)。在该语句中往往需要引用deltaQuery查询结果的列值,通过 ${dih.delta.} 来引用,如:select * from tbl where id=${dih.delta.id}全量导入,db-data-config.xml配置文件结果:
7.启动Solr,测试结果
在内核mycore的DataImport选项下,可以查看我们的配置信息。点击Execute执行。
执行完后,就可以查询出索引的数据了
在full-important的时候有以下这些选项,那么他们是干啥的。
full-import: 请求启动全量导入:http://:/solr/dataimport?command=full-import
返回导入正在进行中的状态信息,导入会在一个新线程中开启(可能会需要一定时间完成导入)。导入完成后,导入的开始时间将存入到conf/dataimport.properties 文件中,用于后面的增量导入。增量导入完成后也会存入增量开始的时间到这个文件,用于下一次增量导入。
全量导入期间并不会阻塞solr查询。
其他附选参数:
clean : (default 'true') 指定是否在导入前清理索引commit : (default ‘true’) 指定导入后是否提交optimize : (default:'true' up to Solr 3.6, 'false' afterwards). 是否进行优化。debug : (default ‘false’). 是否以调试模式运行,开发下使用。调试模式下不会提交,除非明确指定commit=true。后续讲解Solr增量导入的例子。