目录

  • 1 加入数据导入处理器的jar包
  • 2 加入数据库驱动包
  • 3 配置solrconfig.xml文件
    • 3.1 配置lib标签 - 加入驱动jar包
    • 3.2 配置requestHandler标签 - 加入DIH
    • 3.3 在conf目录下创建data-config.xml
  • 4 重启Tomcat并查看DIH的配置
  • 5 执行数据导入

1 加入数据导入处理器的jar包

复制Solr解压后dist目录中的:solr-dataimporthandler-4.10.4.jar;

粘贴到contrib/dataimporthandler/lib目录下, lib目录需要手动创建:

2 加入数据库驱动包

复制所用数据库服务器的相应jar包;

粘贴到contrib/db/lib目录下, db/lib目录需要手动创建:

注意: 这里使用的MySQL服务器版本为5.7.20, 故导入5.1.44版本的jar包 —— 其他较低版本的jar包可能会出现一些不可预知的Bug.

3 配置solrconfig.xml文件

在SolrCore(即collection1)中找到solrconfig.xml文件.

3.1 配置lib标签 - 加入驱动jar包

<!-- 配置加入数据导入、数据库驱动的jar包 -->
<lib dir="${solr.install.dir:../..}/contrib/dataimporthandler/lib" regex=".*\.jar"/>
<lib dir="${solr.install.dir:../..}/contrib/db/lib" regex=".*\.jar"/>

3.2 配置requestHandler标签 - 加入DIH

Solr的数据索引分两种: 全量导入(full-import)和增量导入(delta-import):

① 全量导入: 就是一次性全部导入所有数据;
② 增量导入: 就是当数据库中的数据有更新时再作导入处理.

使用dataimport就需要在solrconfig.xml中添加DIH配置信息:

<!-- 加入数据导入的请求处理器 -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"><str name="config">data-config.xml</str></lst>
</requestHandler>

3.3 在conf目录下创建data-config.xml

(1) data-config.xml文件:

注意: 这里field的column属性对应于数据库中表的字段, 而name属性的值必须与scheme.xml约束文件中新配置的field的name属性的值一致, 否则无法解析.

这里配置的MySQL表信息, 与Solr 06 - Solr中配置使用IK分词器 (配置schema.xml) 中使用的MySQL数据一致, 具体的SQL文件可以在 我的GitHub 中下载, 文件是Solr使用IK分词器的表数据.sql.

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig><!-- 数据源配置 --><dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/solr?useSSL=true" user="ur_login_name" password="ur_pwd"/> <document><!-- 配置sql语句执行结果, 与商品业务域的对应关系 --><entity name="product" pk="pid"query="SELECT pid, name, catalog, catalog_name, price, description, picture FROM products"><field column="pid" name="id"/> <field column="name" name="product_name"/> <field column="catalog" name="product_catalog"/><field column="catalog_name" name="product_catalog_name"/> <field column="price" name="product_price"/> <field column="description" name="product_description"/><field column="picture" name="product_picture"/></entity></document>
</dataConfig>

(2) 参数说明:

dataSource: 定义了数据的位置, 对于数据库, 则是DSN(Data Source Name, 即数据源名称, 数据库服务器的主机名、端口和数据库名、用户、密码); 对于HTTP数据源, 则是基本的URL.
entity: 实体会被处理生成包含多个字段的文档的集合, 会被发送给Solr进行索引. 对于RDBMS数据源, 一个实体是一个视图或表, 可能被一至多个SQL语句处理来生成一系列具有一或多个列(字段)的行(文档).
processor: 一个实体处理器会完成整个从数据源抽取内容、转换并将其添加到索引的工作, 可用自定义实体处理器扩展或替换默认提供的处理器.
transformer: 从实体中取得的每个字段的集都可以选择进行转换, 此过程可修改字段、创建新字段或从单个行生成多个行. 可通过公用接口自定义转换器.

(3) 其他配置用法说明:

<entity name="product" pk="pid"query="SELECT * FROM products"deltaImportQuery="SELECT * FROM products where pid='${dih.delta.id}'"deltaQuery="SELECT pid FROM products where last_modified > '${dih.last_index_time}'" ><field /> <!-- ...... -->
</entity>

pk代表主键;
query: 是在全量导入(full-import)模式下使用的查询;
deltaImportQuerydeltaQuery: 用于增量导入(delta-import)模式:

a) 数据库中要有一个类型为timestamp的类似于last_modified的时间字段;

b) 执行数据导入时, Solr会在自动生成conf/dataimport.properties文件, 用来记录最后一次导入的时间;

c) 执行delta-import的时候, 先根据deltaQuery查出需要导入的数据的id, 然后通过id来执行deltaImportQuery, 最终实现增量导入数据.

(4) Solr 5.x版本的变化:

① Solr 5.x 之后的版本使用${dih.delta.id}来获取需要增量导入的数据的主键, 之前的版本使用的是${dataimporter.delta.ID};
② 使用${dih.last_index_time}来获取dataimport.properties文件中last_index_time的属性值, 之前的版本使用的是${dataimporter.last_index_time}.

4 重启Tomcat并查看DIH的配置

重启Tomcat, 在菜单栏的[Dataimport]查看配置的Entity是否生效. 也可通过菜单栏的[Files]查看配置文件.

5 执行数据导入

(1) 通过Solr管理界面的Dataimport方式导入:

注意: 由于Solr管理界面的不稳定性, 索引状态的显示可能会消失, 可通过查看Dashboard中JVM-Memory的波动程度, 确定是否处于索引状态.

(2) 也可通过HTTP请求的方式导入, HTTP请求URL格式为:

http://ip:port/[web-dir]/CoreName/dataimport?command=command[&params], 其中command命令见下述示例, params参数有如下选项:

参数 描述
clean 默认为true, 表示是否在建立下一次索引前清除原有索引(慎用)
commit 默认为true, 表示是否在操作完成后提交
debug 默认为false, 表示是否以Debug模式运行. 此默认的commit默认为false.
entity 用已指定操作的entity, 只能指定DIH配置文件中内首层元素的name, 若传递空值, 则对所有entity执行操作.
optimize 默认为true, 表示在操作之后是否optimize(优化索引).

(3) 示例:

① 如果执行全量导入, 导入前清除索引, 导入后提交结果, 则发送如下URL请求:
http://ip:port/[webdir/]CoreName/dataimport?command=full-import&clean=true&commit=true

② 如果执行增量导入, 导入前不清除索引, 导入后提交结果, 则发送如下URL请求:
http://ip:port/[webdir/]CoreName/dataimport?command=delta-import&clean=false&commit=true

版权声明

作者: 马瘦风

出处: 博客园 马瘦风的博客

您的支持是对博主的极大鼓励, 感谢您的阅读.

本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.

转载于:https://www.cnblogs.com/shoufeng/p/9801490.html

Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)相关推荐

  1. solr mysql 导入命令_Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    1 加入数据导入处理器的jar包 复制Solr解压后dist目录中的:solr-dataimporthandler-4.10.4.jar; 粘贴到contrib/dataimporthandler/l ...

  2. php mysql取出来,php从mysql数据库中取数据

    php从数据库中取数据  面向过程 $server_name="localhost:3306"; //数据库服务器名称 $username="root"; // ...

  3. MySQL数据库中导入导出方法以及工具介绍

    MySQL数据库中导入导出方法以及工具介绍 1.MySQLimport的语法介绍: mysqlimport位于mysql/bin目录中,是mysql的一个载入(或者说导入)数据的一个非常有效的工具.这 ...

  4. mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】

    当所需的数据存贮在MySQL数据库中时,那么数据分析首要任务就是要通过Pandas读取MySQL数据.例如,某网站注册用户信息保存在MySQL数据库中,如图所示(部分数据),下面将使用Pandas的r ...

  5. 从Mysql数据库中导入导出表结构

    1.从Mysql数据库中导入sql表 很简单,只需要一个命令即可搞定: [root@localhost ~]# mysql -uroot -piweb_xxx_mysql iweb < modi ...

  6. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  7. 1001系列之pandas0001如何从Mysql数据库中导入导出数据

    一.Pymysql模块简介 Mysql数据库是数据挖掘任务的数据源之一,通过pymysql模块可以直接连接MySQL数据库,进行增删改查等操作. Python连接MySQL的流程如下: 1.1curs ...

  8. 利用ECharts可视化mysql数据库中的数据

    利用ECharts可视化mysql数据库中的数据 技术实现背景 在我们的日常开发中我们经常使用到各种各样的数据进行相关的功能的开发,在这个过程中我们可以用到各种各样的图表来分析和实现我们的需求,很多的 ...

  9. mysql double 转 字符串_没想到!在MySQL数据库中的数据有这三种类型!

    MySQL数据库是一个或多个数据列构成二维表,它的每一种数据列都有特定类型,而类型决定MySQL是怎么看待该列数据,如果把整型数值存放到字符类型的列中,MySQL则会把它当成字符串来处理. MySQL ...

最新文章

  1. 如何避免重复提交?分布式服务的幂等性设计!
  2. (转)ArcEngine读取数据(数据访问)
  3. 计算机栈是什么,什么是数据栈?——线性表
  4. C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)
  5. S2SH框架入门之使用struts2
  6. ccs6 linux安装教程,【图片】【吧主帖】在LINUX(ubuntu)系统下装CCSv6方法(原创)【dsp吧】_百度贴吧...
  7. 超简单的分布式ID生成方案!美团开源框架介绍
  8. 《jQuery Mobile入门经典》—— 2.2 展现CSS样式
  9. oracle 存储过程导出sql语句 导出为文件
  10. mysql 分库备份
  11. CFGAN--基于生成对抗神经网络的协同过滤推荐
  12. java 1.13 快照下载_Minecraft我的世界1.13Java版快照18w10c发布
  13. linux中分号转义字符,Linux职场技术篇-Linux shell中元字符、转义符、通配符的使用方法...
  14. JS代码转换d.ts语法
  15. 趁年轻,我们干点什么吧
  16. 天津大学计算机软件学院,2019计算机考研天津大学数据科学与服务工程团队(与软件学院共建)...
  17. 国家专精特新小巨人申报条件及培育措施
  18. 阿里在人工智能发展治理方向的思考和实践
  19. 20道jQuery 常见的面试问题和答案
  20. 公共钥匙盒(C++结构体)

热门文章

  1. 用JAVA如何实现word文档在线预览
  2. 游戏开发unity打包相关系列:使用IL2CPP时打包windows程序出现Currently selected scripting backend (IL2CPP) is not installed
  3. SpringBoot 启动报错 Specified class is an interface
  4. CentOS 安装 Git
  5. WSL2安装及其python环境配置
  6. 快播大屏幕推出的真正原因
  7. 2021-2027全球与中国安全监控摄像头软件市场现状及未来发展趋势
  8. Unity开发备忘录000006:用Unity标准着色器构建金属材质效果(二)
  9. 如何有效的向 AI 提问 ?
  10. 常用英文命名规则缩写