DIH配置及使用@SOLR7实践(二)

DIH配置及使用

网上已经有很多相关文章了,但是实践中还是遇到了些问题,备忘一下。

一、配置solrconfig.xml

编辑/var/solr/data/new_core/conf/solrconfig.xml
在第75行左右增加dih的jar包引用

    #新增dih配置<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />#以下是原有配置<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" /><lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />

在第680行左右增加

  #新增dih配置<requestHandler name="/dataimport" class="solr.DataImportHandler"><lst name="defaults"><str name="config">db-data-config.xml</str></lst></requestHandler>#以下是原有配置<requestHandler name="/select" class="solr.SearchHandler">

二、配置db-data-config.xml

编辑/var/solr/data/new_core/conf/db-data-config.xml

<dataConfig><dataSource name="DS1" driver="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@**ip**:1521:****" user="**user**" password="**pwd**" /><dataSource name="DS2" driver="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://**ip**:50000/****" user="****" password="****"/><document ><entity name="DS1ENTITY" dataSource="DS1" pk="ID" transformer="ClobTransformer" query="SELECT * FROM DS1TB_2_SLR_DATA WHERE ENABLE=1"deltaQuery="SELECT ID FROM DS1TB_2_SLR_DATA WHERE ENABLE=1 AND TO_CHAR(LASTMODTIME,'yyyy-mm-dd') > to_char(to_date(substr('${dataimporter.DS1ENTITY.last_index_time}',1,10),'yyyy-mm-dd')-1 day, 'yyyy-mm-dd')"deltaImportQuery="SELECT * FROM DS1TB_2_SLR_DATA WHERE ID = '${dataimporter.DS1ENTITY.delta.id}'"deletedPkQuery="SELECT * FROM DS1TB_2_SLR_DATA WHERE ENABLE=0"><field column="ID" name="id" /><field column="CONTENT" name="content" clob="true"/></entity><entity name="DS2ENTITY" dataSource="DS2" pk="ID" transformer="ClobTransformer" query="SELECT * FROM DS2ENTITY_2_SLRSRCH_DATA"deltaQuery="SELECT ID FROM DS2ENTITY_2_SLRSRCH_DATA WHERE TO_CHAR(LASTMODTIME,'yyyy-mm-dd') > to_char(to_date(substr('${dataimporter.DS2ENTITY.last_index_time}',1,10),'yyyy-mm-dd')-1, 'yyyy-mm-dd')"deltaImportQuery="SELECT * FROM DS2ENTITY_2_SLRSRCH_DATA WHERE ID = '${dataimporter.DS2ENTITY.delta.id}'"deletedPkQuery="SELECT * FROM DS2ENTITY_2_SLRSRCH_DATA_DELETE"><field column="ID" name="id" /><field column="CONTENT" name="content" clob="true"/></entity></document>
</dataConfig>

entity节点SQL相关属性

属性名 作用
query 定义全量导入数据的查询SQL
deltaQuery 定义增量导入数据主键的查询SQL
deltaImportQuery 定义增量导入数据全部字段的查询SQL
deletedPkQuery 定义增量导入删除数据的查询SQL
parentDeltaQuery 定义增量导入嵌套子entity更新父entity的SQL

配置时遇到的一些问题
多个datasource的配置,dataConfig节点下增加dataSource节点,并需要在entity节点中显示设置dataSource属性,单一dataSource节点时,entity节点中可以不配置dataSource属性;
由于业务系统的存储文字的blob字段保存的是加密后的内容,所以先使用数据库函数将blob字段处理为clob字段,再在entity的节点增加属性transformer=“ClobTransformer”,并在entity节点下的field节点指定clob字段,注意field节点的column和name两个属性字段名的大小写;
SQL中用到了DataImporthandler中的变量,${dataimporter.entity名.last_index_time}和${dataimporter.entity名.delta.字段名}分别表示entity的最后更新时间和entity的增量导入时字段,很多文章在介绍这两个变量时,省略中间的entity名,对于单一entity是没问题的,但是配置多个entity每次增量更新一个entity时,${dataimporter.last_index_time}取到的最后更新时间是所有entity中最后更新时间,而不是更新的entity的最后更新时间;
SOLR对时间类型字段处理是有时区问题的!数据库里字段和SOLR索引后的字段时间是不一样的,原因是SOLR会将时间类型字段转换到UTC时区来处理。如果只是用时间字段来进行排序,几乎没有影响,但如果需要展示时间字段,那就有问题了。网上有文章讲怎样修正SOLR源码,支持其他时区,具体方法请自行搜索。我使用了一个变通的方法,即在solr索引中定义一个字符串字段,将时间类型字段copy到字符串字段中,排序时使用时间类型字段,显示时使用字符串字段;
entity是可以嵌套的,但会降低SOLR的加载速度。

三、数据库驱动安装

网上有文章提到将数据库驱动放在/opt/solr/contrib/extraction/lib目录下,当然没有问题;
还有一种方法,在/var/solr/data/new_core下建目录lib,并将数据库驱动放在该目录下,两者的区别只是在于影响的范围。

需要重启一下SOLR服务,让以上修改生效。
在new_core下的Dataimport菜单,点击Execute按钮,得到如下页面,表示你已经导入成功了。

当然即使有错误,也有可能看到这个页面,需要检查一下日志。
日志所在目录 /var/solr/logs/solr.log。

四、dataimport.properties

这个文件不要创建也不需要配置,再页面执行过Dataimport后,会自动生成这个文件,其所在目录/var/solr/data/new_core/conf。

单独讲dataimport.properties文件,其实还是SOLR时区的原因。如果不修改SOLR的时区,在dataimport.properties中记录的更新时间,将会是UTC时区的时间。

五、DIH使用

参数名 取值 作用
command full-import/delta-import/status/reload-config/abort 全量导入 / 增量导入 / 导入状态 / 重新加载配置文件 / 中止导入
verbose true/false 输出详细步骤
clean true/false 删除原有索引
commit true/false 导入后是否提交
optimize true/false 导入后是否优化索引
debug true/false 调试模式,不会提交数据
entity 与db-data-config.xml中定义的entity对应 所要导入的entity
start 整数 调试模式用,开始的记录数
rows 整数 调试模式用,导入的记录数

导入数据可以使用URL的方式
http://localhost:8983/solr/dataimport?command=delta-import

导入数据也可以使用solrj的方式

public void dataimport(String solr_core, String command, String clean, String commit, String optimize, String entity) {HttpSolrClient server = new HttpSolrClient.Builder("http://localhost:8983/solr/new_core").build();SolrQuery query = new SolrQuery();query.setRequestHandler("/dataimport");query.setParam("command", command);query.setParam("clean", clean);query.setParam("commit", commit);query.setParam("optimize", optimize);query.setParam("entity", entity);try {server.query(query);} catch (Exception e) {e.printStackTrace();}
}

下面两篇文章讲得挺全的
https://wiki.apache.org/solr/DataImportHandler

https://blog.csdn.net/truong/article/details/76070571 (这篇是转载,没找到原创)

SOLR7实践(二)--DIH配置及使用相关推荐

  1. FastD 最佳实践二: 构建配置中心

    过去专门做了一篇文档来构建配置中心,基于 zookeeper 的配置中心. 环境要求及构建步骤可参考: QConf搭建配置中心 随着业务增长,部署的机器可能会随着增长,增加配置难度和维护难度.配置会因 ...

  2. Android 持续集成实践(二)——配置 Docker + gitlab-runner 实现线上自动编译

    文章目录 前言 系列文章 Android 持续集成实践(二)--配置 Docker + gitlab-runner 实现线上自动编译 安装 Docker 安装 gitlab-runner 安装 注册 ...

  3. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

    原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二) Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 ...

  4. Nginx反向代理与负载均衡应用实践(二)

    Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...

  5. 大学计算机网络配置实验报告,北京理工大学-计算机网络实践-IP路由配置与路由协议分析实验报告.docx...

    北京理工大学-计算机网络实践-IP路由配置与路由协议分析实验报告.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 LAB2 ...

  6. Solr初探(五)---Solr7.5利用DIH导入结构化数据构建索引

    才疏学浅,欢迎批评指正 Solr7.5利用DIH导入结构化数据构建索引 1.什么是DIH 2.使用DIH 3.使用DIH中遇到的一些问题 7.5利用DIH导入结构化数据构建索引 1.什么是DIH 按照 ...

  7. (九)Fabric2.0 通道实践-更新通道配置(修改区块交易数量)

    总目录: (0) 如何利用区块链保护知识产权 (一)HyperLedger Fabric 2.0-release测试网络部署 (二)Fabric2.0 first-network 生成配置说明 (三) ...

  8. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境...

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  9. VUE3.0 二. vue-cli3 配置指南

    VUE3.0 二. vue-cli3配置指南 一.vue.config.js 详解 官网地址: https://cli.vuejs.org/zh/config/ 使用vue3 的时候需要添加一个vue ...

最新文章

  1. 智能车竞赛中的车模足底按摩
  2. elment-ui 表格进行实时百分比计算
  3. gcp上使用gpu来学习tensorflow
  4. 【Socket网络编程】11.网络编程中的 数据封装 和 数据拆封
  5. 简单网络管理协议(SNMP)实现linux系统信息网络监控
  6. DELPHI日期时间函数(DateUtils单元)
  7. Android开发之Handler
  8. 你还不知道怎么退出 Vim?
  9. 稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!...
  10. 哈尔滨理工C语言程序设计精髓_计算机科学与信息工程学院C语言程序设计竞赛圆满完成!...
  11. java 程序更新_如何关闭JAVA更新程序
  12. docker 中运行 mysql
  13. Win7电脑中毒解决过程复盘
  14. c语言延时时间计算器,rc延时电路延时时间计算公式
  15. 计算机系统繁体环境,繁体简体转换
  16. 原子弹级别牛股发动机指标软件开发收获
  17. mtd-utils交叉编译
  18. UVALive - 4394 (区间dp)
  19. 读书笔记:Spring in action 第2章
  20. JAVA设置代理的两种方式(HTTP和HTTPS)

热门文章

  1. mechanize 是 pthon 的并且可编程的 浏览器插件,
  2. 100行代码实现数字滚动抽奖功能
  3. 基于Canal+kafka监听数据库变化的最佳实践
  4. c语言——输入一个字符串,将其逆序输出
  5. Python程序设计第三章测验总结
  6. 前端性能优化与计算方式
  7. textarea文本框的placeholder文字换行
  8. textarea内容换行,textarea中换行符br失效
  9. 实战案例汇总,Java架构师实战视频教程
  10. 跟我学LabVIEW:什么是全局变量?如何创建及使用全局变量?