solr增量导入mysql数据到solr更新索引

:前提条件:solr版本:8.x

1、表结构新增字段【updateTime】用来增量更新的游标,也就是在原来的字段中增加一个更新时间戳的字段,solr利用这个字段来区分哪些数据是已经导入过的,哪些又是新的,同样在dataimport.properties配置文件里面就有对应的更新时间。

表结构:

-- solr测试表结构
CREATE TABLE solr_demo (
	id int NOT NULL COMMENT '主键',
	name varchar(64) NOT NULL COMMENT '学生姓名',
	sex int default NULL COMMENT '性别 0=女 1=男',
	address varchar(200) DEFAULT NULL COMMENT '居住地址',
	updateTime timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'SOLR数据更新时间戳',
	isDeleted int(1) DEFAULT 0 COMMENT '逻辑删除',
	primary key (ID)
) COMMENT='solr_demo表';
 
-- 全量测试数据
INSERT INTO solr_demo VALUES (1, '张三', 0, '甘肃省兰州市城关区酒泉路211号', default, default);
INSERT INTO solr_demo VALUES (2, '李四', 1, '江西省泰和县中山路', default, default);
INSERT INTO solr_demo VALUES (3, '郭海藻', 0, '北京市朝阳区朝阳人民法院路355号', default, default);
INSERT INTO solr_demo VALUES (4, '唐三', 1, '斗罗大陆史莱克学院1号楼', default, default);
INSERT INTO solr_demo VALUES (5, '小舞', 1, '斗罗大陆史莱克学院22号楼', default, default);
INSERT INTO solr_demo VALUES (6, '萧炎', 1, '斗气大陆五大家族萧家门房', default, default);
INSERT INTO solr_demo VALUES (7, '哈登', 1, '美国火箭丰田球场', default, default);
-- 增量测试数据
INSERT INTO solr_demo VALUES (8, 'James', 0, '美国洛杉矶湖人队', default, default);
INSERT INTO solr_demo VALUES (9, 'McGrady', 0, '美国火箭丰田球场前排', default, default);

示例流程:首先全量导入1-7条记录,然后增量导入8-9条记录,用来模拟将来实际环境中的增量更新数据到solr,而且在实际使用过程中我们绝大部分需求会使用增量更新来减轻各方面的压力。

2、/solr-8.0.0/server/solr/demo_core/conf/data-config.xml配置增量更新

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="source_demo"
                type="JdbcDataSource"
                driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost:3306/hornet"
                user="root"
                password="123456"
                batchSize="-1"/>
    <document name="demo_doc">
        <!-- 全量导入数据配置 -->
        <!-- <entity name="solr_demo" 
                dataSource="source_demo"
                pk="id" 
                query="select * from solr_demo">
            <field column="id" name="id"/>  
            <field column="name" name="name"/>
            <field column="sex" name="sex"/>
            <field column="address" name="address"/> 
            <field column="updateTime" name="updateTime"/>
            <field column="isDeleted" name="isDeleted"/>
        </entity> -->
        <!-- 增量导入数据配置 -->
        <!-- 
            transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签
            query:查询数据库表符合记录数据
            deltaQuery:增量索引查询主键ID  注意这个只能返回ID字段   
            deltaImportQuery:增量索引查询导入的数据 
            deletedPkQuery:增量索引删除主键ID查询 注意这个只能返回ID字段 
        -->
        <entity name="solr_demo" 
                dataSource="source_demo"
                pk="id" 
                query="select * from solr_demo where 1=1 and isDeleted=0"
                deltaImportQuery="select * from solr_demo where 1=1 and id='${dih.delta.id}'"
                deltaQuery="select id from solr_demo where 1=1 and updateTime > '${dataimporter.last_index_time}' and isDeleted=0"
                deletedPkQuery="select id from solr_demo where 1=1 and isDeleted=1">
            <field column="id" name="id"/>  
            <field column="name" name="name"/>
            <field column="sex" name="sex"/>
            <field column="address" name="address"/> 
            <field column="updateTime" name="updateTime"/>
            <field column="isDeleted" name="isDeleted"/>
        </entity>
    </document>
</dataConfig>
 

  isDeleted这个字段根据实际情况取舍,也就是指实际情况中数据的逻辑删除,在业务逻辑中删除,但是数据库中并未删除。

and isDeleted=?

3、/solr-8.0.0/server/solr/demo_core/conf/managed-schema更新字段的映射以及分词配置,重点是更新【updateTime】

<!-- 增量更新配置-->
<field name="updateTime" type="pdate" indexed="true" stored="true" />
<!-- <field name="isDeleted" type="string" indexed="true" stored="true" required="true" multiValued="false" /> -->

:旧版本的type你可能在别的地方会看到设置为date,但实际上在这个版本需要设置为pdate,不然会报错。 

4、正常重启solr或者reload进行验证,Dataimport导入类型需要选择delta-import

数据库1-7条数据:

 solr全量导入1-7条数据:

数据库增加8-9条数据: 

solr增量导入8-9条数据:

 

结论:1-7条是全量从mysql导入到solr中的,然后mysql新增8-9条数据,solr再使用delta-import增量导入8-9条数据。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西米先生「软件工程师」

您的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值