Solr Full Import全量导入

所谓全量索引一般指的是每次从数据库中读取需要导入的全部数据,然后提交到Solr Server,最后删除指定core的所有索引数据进行重建。全量导入一般在数据首次导入或者备份数据恢复时执行。

以下为一个多表查询的全量导入案例:

ER图:

ER图

根据如上ER图,我们在数据库中执行如下SQL建表并插入测试数据。

use solr;

create table feature(item_id bigint,descrip varchar(80));

create table item(id bigint, item_name varchar(20), manu varchar(20), weight float,price float, popularity int, includes varchar(20));

create table item_category(item_id bigint, category_id bigint);

create table category(id bigint, descrip varchar(80));

alter table item add primary key(id);

alter table item_category add primary key(item_id, category_id);

alter table category add primary key(id);

insert into item values(1,"item1", "menu1", 12.0, 33.1, 10, "includes1");

insert into item_category values(1,1);

insert into category values(1,"this is the description of category 1");

insert into feature values(1,"this is the feature 1");

需求描述:我们希望将item表的所有字段以及item的category信息,item的descrip描述信息一并导入到solr指定的core中,因此solr的schema.xml中需要预先定义如下域:name, manu, weight, price, popularity, includes, cat, features.

解决方案:

比较容易想到的就是通过SQL语句一并返回所需的域(数据)。

use solr;

select i.id,i.item_name,i.manu,i.weight,i.price,i.popularity,i.includes,c.descrip as cat,f.descrip as feature from item i, item_category ic, category c, feature f where i.id=ic.item_id and ic.category_id=c.id and i.id=f.item_id;

也可以通过data-config.xml中嵌套entity来实现。

Solr Delta Import增量导入

当索引数据量很大时,每次都依靠全量导入显然很不切实际,所以增量导入索引数据更为重要。

增量导入操作内部是新开辟一个新线程来完成,并且此时core的dataimport运行状态为status="busy"。增量导入耗时时间取决于需要增量导入的数据集合大小。任何时候你都可以通过http://localhost:8080/solr//dataimport 这个链接来获取到增量导入的运行状态。

当增量导入操作被执行,他会读取存储在conf/deltaimport.properties配置文件,利用配置文件里记录的上一次操作时间来运行增量查询,增量导入完成后,会更新conf/deltaimport.properties配置文件里的上一次操作时间戳。首次执行增量导入时,若conf/deltaimport.properties配置文件不存在,会自动创建。

#Sun Mar 03 19:59:43 IRKT 2019

item.last_index_time=2019-03-03 19\:59\:43

last_index_time=2019-03-03 19\:59\:43

如果要使用增量导入,前提是你的表必需有两个字段,一个是删除标志字段即逻辑删除标志:isdeleted,另一个则是数据创建时间字段:create_date,字段名称不一定非得是isdeleted和create_date,但必须要包含两个表示该含义的字段。根据数据创建时间跟上一次增量导入操作时间一对比,就可以通过SQL语句查询出需要增量导入的数据,根据isdeleted字段可以查询出被标记为删除的数据,这些数据的ID主键需要传递给solr,这样solr就能同步删除索引中相关Document,实现数据增量更新。如果你数据表里的数据都是物理删除,没有逻辑标志字段的话,那么找出已删除的数据显得比较困难,所以这就是需要逻辑删除标志字段的原因。

仍然使用上一节的那几张表为例。对于复合主键记录的增量更新,solr会抛出deltaQuery has no column to resolve to declared paimary key pk='key1, key2',暂时还没有找到合适的解决方案。如有,请留言告知,谢谢。

pk:表示当前entity表示主键字段名称,这里的主键指的是数据库表中的主键,而非solr中的uniqueKey主键域。如果你的sql语句中使用了as关键字为主键字段定义了别名,那么这里的pk属性需要相应的修改为主键字段的别名,切记;

query:用于指定全量导入时需要的sql语句,比如select * from xxx where isdeleted=0,查询返回的是为被删除的所有有效数据,这个query参数只对全量导入有效,对增量导入无效;

deltaQuery:查询需要增量导入的记录的主键id所需的sql语句。可能是update,insert,delete等操作,比如:deltaQuery="select id from xxx where my_date > '${dataimporter.last_index_time}'",此参数值对增量导入有效;

deletedPkQuery:查询已经被逻辑删除了的数据所需的SQL语句,所以这里你需要一个类似isdeleted的逻辑删除标志位字段。solr通过此参数表示的sql语句执行后返回的结果集来删除索引里面对应的数据。使用示例:select id from myinfo where isdeleted=1,此参数对增量导入有效。

deltaImportQuery: deltaImpotQuery="select * from myinfo where id='${dataimporter.delta.id}'",利用deltaQuery参数返回的所有需要增量导入的数据主键id,遍历每个主键id,然后循环执行deltaImportQuery参数表示的sql语句返回所有需要增量导入的数据。其中变量${dataimporter.delta.id}用于获取deltaQuery返回的每个主键id。

solr mysql增量导入_Solr全量与增量导入相关推荐

  1. MySQL定时备份(全量备份+增量备份)

    MySQL 定时备份 参考 zone7_ 的 实战-MySQL定时备份系列文章 参考 zmcyu 的 mysql数据库的完整备份.差异备份.增量备份 更多binlog的学习参考马丁传奇的 MySQL的 ...

  2. mysql增量脚本_mysql全量和增量备份脚本

    全量: [root@master leo]# cat DBfullBak.sh #!/bin/bash #use mysqldump to fully backup mysql data BakDir ...

  3. MySQL数据以全量和增量方式,向ES搜索引擎同步流程

    本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...

  4. python 读取文件夹 增量文件_Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  5. solr mysql增量导入_10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)

    1.创建MySQL数据 create databasesolr;usesolr;DROP TABLE IF EXISTSstudent;CREATE TABLEstudent ( idchar(10) ...

  6. Sqoop(四)增量导入、全量导入、减量导入

    本文转自:https://www.cnblogs.com/yfb918/p/10858355.html 增量导入 一.说明 当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数 ...

  7. MySQL数据库全量、增量备份与恢复

    MySQL数据库全量.增量备份与恢复 数据库备份的重要性 在生产的环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果. 造成数据丢失的原因 程序错误 人为商店 计算机失败 磁盘失败 ...

  8. Mysql 增量备份和全量备份

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备 ...

  9. Solr的增量更新和全量更新对比

    Solr的增量更新和全量更新 solr的简介 solr是一个采用java语言,基于Lucene的全文搜索引擎. solr的一些原理 solr通过数据库的数据导入到索引库中,并且给数据创建相应的索引,用 ...

最新文章

  1. Windows中文件夹属性加密的作用?
  2. 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】
  3. java 并发_Java并发防范机制
  4. csharp read excel file get sheetName list
  5. tomcat热部署 更改类文件不需要重起
  6. 大数据之-Hadoop之HDFS_HDFS_副本数量设置---大数据之hadoop工作笔记0053
  7. c++tcp接收文件缓存多大合适_linux高性能网络编程之tcp连接的内存使用
  8. java-字符串反转
  9. NYOJ41 - 三个数从小到大排序
  10. 关于Apache的25个初中级面试题
  11. Flash CS4运行时提示:Java运行时环境初始化时出现错误。您可能需要重新安装 Flash。解决方案
  12. BP(BackPropagation)神经网络算法详解
  13. map字符串转json格式
  14. 3dmax如何删除重叠部分
  15. Chapter 7. 结构体、枚举
  16. 中国天气网免费天气API
  17. linux运行ktr文件,Linux下用命令來執行kettle文件資源庫的文件ktr與kjb的方法
  18. 办公邮箱怎么选,邮箱选哪个更好用?
  19. Markdown写出高大上时序图
  20. SpringCloud调用接口流程

热门文章

  1. 通过CSS切换图片效果,点击这个图片可以实现连接功能,这里的图片在一张大图片中,每个并要切换的图片没有切换,通过disposition定位的方式做
  2. jbpm_工作流框架笔记
  3. 虚拟化宿主服务器网络设置,kvm虚拟化安装配置手册
  4. 深入浅出Yolov5之自有数据集训练超详细教程
  5. Qt学习笔记之样式表
  6. 在 linux 下使用 CMake 构建应用程序
  7. Ubuntu 下 apt-get 命令
  8. RESTful架构详解【转】
  9. React Native微信支付开发爬坑之旅
  10. [Flink]Flink1.3 Stream指南六 事件时间与处理时间