博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)
阅读量:5290 次
发布时间:2019-06-14

本文共 2790 字,大约阅读时间需要 9 分钟。

目录

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包

3.2 配置requestHandler标签 - 加入DIH

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

① 全量导入: 就是一次性全部导入所有数据;

② 增量导入: 就是当数据库中的数据有更新时再作导入处理.

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

data-config.xml

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

(1) data-config.xml文件:

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

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

(2) 参数说明:

dataSource: 定义了数据的位置, 对于数据库, 则是DSN(Data Source Name, 即数据源名称, 数据库服务器的主机名、端口和数据库名、用户、密码); 对于HTTP数据源, 则是基本的URL.

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

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

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格式为:

其中command命令见下述示例, params参数有如下选项:

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

(3) 示例:

① 如果执行全量导入, 导入前清除索引, 导入后提交结果, 则发送如下URL请求:

② 如果执行增量导入, 导入前不清除索引, 导入后提交结果, 则发送如下URL请求:

版权声明

作者:

出处: 博客园

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

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

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

你可能感兴趣的文章
大数据没那么重要
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
学android:直接用jdk来helloworld
查看>>
Access Jira RESTful API by cURL
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
Spark基础脚本入门实践3:Pair RDD开发
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理
查看>>
python使用easyinstall安装xlrd、xlwt、pandas等功能模块的方法
查看>>
一个杯子的测试用例
查看>>
前端面试总结——http、html和浏览器篇
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
openCV(一)---将openCV框架导入iOS工程中
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
一步步学习微软InfoPath2010和SP2010--第五章节--添加逻辑和规则到表单(2)--处理验证与格式化...
查看>>
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。...
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>