Solr之Mysql数据库全量、增量同步-yellowcong

标签: solr mysql 数据库 | 发表时间:2017-12-05 13:06 | 作者:yelllowcong
出处:http://blog.csdn.net

Solr和数据库进行数据的同步,1、配置solrconfig.xml,2、配置data-config.xml,3.配置数据库(创建表和添加远程访问权限),4.配置schema.xml,5、添加jar包,6.系统时间和mysql时间同步,这样dataimport.properties 记录的更新索引时间和数据库时间一致,才能实现增量更新, date -s “2017-04-14 12:12:00”

1 修改solrconfig.xml

  
#修改solrconfig.xml 配置文件
/usr/local/solr/solr-4.10.3/example/solr/collection1/conf/solrconfig.xml

#添加如下配置 增加resultHandler配置 
<requestHandler name="/dataimport"  class="org.apache.solr.handler.dataimport.DataImportHandler">        
        <lst name="defaults">        
            <str name="config">data-config.xml</str>        
        </lst>        
</requestHandler>  

修改solrconfig.xml 文件
这里写图片描述
添加如下配置
这里写图片描述

2 创建data-config.xml

在solrconfig.xml的同级目录下创建data-config.xml文件,配置数据库连接和Solr与mysql数据的对应关系和查询语句。

a 创建测试数据

使用的是Mysql测试的,我的oracle完犊子了

  -- 开启远程访问
GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

-- 开启远程访问
GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

-- 创建数据库
DROP DATABASE IF EXISTS solr;
CREATE DATABASE solr;

USE solr;
-- 如果存在就删除表
DROP TABLE IF EXISTS common_passage;

-- 创建表
CREATE TABLE common_passage(
    id INT PRIMARY KEY AUTO_INCREMENT  COMMENT '主键',
    author VARCHAR(32) COMMENT '作者',
    title VARCHAR(64)   COMMENT '标题',
    content TEXT NOT NULL COMMENT  '文章内容',
    add_date TIMESTAMP   COMMENT '添加日期'
);

-- mysql 的日期是一个函数-- 尴尬了
-- select  SYSDATE() from DUAL
-- 插入数据
INSERT INTO common_passage VALUES(NULL,'张三','Java','Java是xx',SYSDATE());
INSERT INTO common_passage VALUES(NULL,'李四','Oracle','关系型数据库',SYSDATE());
INSERT INTO common_passage VALUES(NULL,'王五','Mysql','老子也是关系型 数据库',SYSDATE());
INSERT INTO common_passage VALUES(NULL,'赵六','Solr','基于Lucene的搜索引擎',SYSDATE());

b 配置data-config.xml

我这个地方是我的数据库配置,你最好看好自己的数据库配置地址,以及用户名及密码等,${dataimporter.request.id} 这个用来获取传递过来的查询参数,id是变化的,但是dataimporter.request是固定的

deltaImportQuery 是在增量导入的时候调用
deltaQuery 增量导入的时候,先查询满足增量条件的数据,然后,执行deltaImportQuery 的sql,导入数据

  <dataConfig> 
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"     
    url="jdbc:mysql://10.0.7.113/solr" user="root" password="root"/> 
        <document> 
        <!-- ${dataimport.request.id}中dataimport,是solrconfig.xml配置的名称--> 
        <entity name="common_passage"  transformer="DateFormatTransformer"  
            query="SELECT id,author,title,content,add_date FROM common_passage a WHERE a.id >= ${dataimporter.request.id}"
            deltaImportQuery="SELECT id,author,title,content,add_date FROM common_passage a WHERE a.id = ${dih.delta.id}"  
            deltaQuery="SELECT id FROM common_passage where add_date > '${dataimporter.last_index_time}'">
      <!--查询的数据和数据库索引意义对应
                    column 是查询的字段
        name 是solr索引对应的字段
        --> 
        <field column="id" name="id"/> 
        <field column="author" name="author"/> 
        <field column="title" name="title"/> 
        <field column="content" name="content"/> 
        <field column="add_date" name="add_date" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/> 
        </entity> 
    </document> 
</dataConfig>

这里写图片描述

c 配置schema.xml 文件

我们的entity的索引字段,需要在schema.xml文件中配置,有些字段是存在的,不用配置,有些没有,就需要自己配置了。

  <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
<field name="add_date" type="date" indexed="true" stored="true"/>

这里写图片描述

3 jar包的导入

拷贝solr-dataimporthandler-4.10.3.jar,solr-dataimporthandler-extras-4.10.3.jar,两个jar包到tomcat的solr的lib目录下

拷贝Mysql驱动,看你的数据库的驱动,根据你自己的驱动来弄

  #拷贝solr驱动
cp solr-dataimporthandler-4.10.3.jar /usr/local/solr/apache-tomcat-7.0.62/webapps/solr/WEB-INF/lib/

cp solr-dataimporthandler-extras-4.10.3.jar /usr/local/solr/apache-tomcat-7.0.62/webapps/solr/WEB-INF/lib/

#拷贝Mysql驱动, 直接下载到lib目录
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar

这里写图片描述

拷贝到目标目录
这里写图片描述

导入数据

添加成功后,导入的配置有数据了

这里写图片描述

导入的方式(Full Import/全部导入, delta import 增量同步)

这里写图片描述

全量

一次将所有的数据都导入
这里写图片描述

同步的结果
这里写图片描述

通过url的方式来同步,而非管控台方式
这里写图片描述

  --直接在浏览器里面,发送get请求
http://192.168.66.100:8080/solr/collection1/dataimport?command=full-import&clean=true&commit=true&wt=json&indent=true&verbose=false&optimize=false&debug=false&id=0
参数 物理意义
command full-import(全量)/delta-import(增量)
clean 是否清空数据
commit 是否提交
wt 返回数据格式
indent 返回的结果是否缩进
verbose 表示你想要得到一些关于中间步骤的信息
optimize optimize操作可以优化查询性能,但是消耗资源多
debug debug模式
id 这个地方的数据是自定义的参数



下面是请求返回结果
这里写图片描述

增量同步

逐渐增加索引的量。需要结合deltaImportQuery,和deltaQuery 两个查询,(这种增量的方式,需要在设计表的时候,添加一个字段,来记录最后更新的时间)
1、deltaQuery 查询出满足增量条件的id
2、deltaImportQuery导入满足条件id的数据

这里写图片描述

请求结果

  http://192.168.66.100:8080/solr/collection1/dataimport?command=delta-import&commit=true&wt=json&indent=true&verbose=false&clean=false&optimize=false&debug=false

请求详细

这里写图片描述

dataimport.properties

这个文件记录最后导入数据的时间, ${dataimporter.last_index_time}调用的就是这个配置文件里面的时间

这里写图片描述

Tomcat的常用

  #关闭tomcat
/usr/local/solr/apache-tomcat-7.0.62/bin/shutdown.sh

#开启tomcat
/usr/local/solr/apache-tomcat-7.0.62/bin/startup.sh

#查看启动情况
tail -f -n 100 /usr/local/solr/apache-tomcat-7.0.62/logs/catalina.2017-12-04.log

#查看启动情况
jps

参考文献

http://blog.csdn.net/yuwenruli/article/details/8442815
http://blog.csdn.net/jiangjun0130/article/details/50914338
http://blog.csdn.net/a__java___a/article/details/22688243
http://www.jianshu.com/p/c0b06643a467

作者:yelllowcong 发表于2017/12/5 14:16:32 原文链接
阅读:74 评论:0 查看评论

相关 [solr mysql 数据库] 推荐:

Solr之Mysql数据库全量、增量同步-yellowcong

- - CSDN博客编程语言推荐文章
1 修改solrconfig.xml. 修改solrconfig.xml 文件. 2 创建data-config.xml. 在solrconfig.xml的同级目录下创建data-config.xml文件,配置数据库连接和Solr与mysql数据的对应关系和查询语句. 使用的是Mysql测试的,我的oracle完犊子了.

Solr与Mysql集成指南

- sun - 草根网:互联网界的读者文摘
在《企业级搜索引擎Solr使用入门指南》及《企业级搜索引擎Solr交流》中对Solr的使用做了简单介绍. 在数据库驱动的应用中,当时采....

Solr与Mysql简单集成

- - 互联网 - ITeye博客
Solr与Mysql数据库的集成,实现全量索引、增量索引的创建. 基本原理很简单:在Solr项目中注册solr的DataImportHandler并配置Mysql数据源以及数据查询sql语句. 当我们通过Solr后台控制页面或者直接访问某个地址(后面给出),Solr就会调用DataImportHandler,连接数据库,根据sql语句查询数据,创建索引.

Solr连接数据库配置

- - CSDN博客推荐文章
Solr是基于Lucene的全文搜索服务器, 它是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口. 用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果. 本文档介绍将Solr4.2.0部署到Tomcat6并连接数据库获取数据的方法.

Solr从数据库导入数据

- - CSDN博客互联网推荐文章
一. 数据导入(DataImportHandler-DIH). DIH 是solr 提供的一种针对数据库、xml/HTTP、富文本对象导入到solr 索引库的工具包. apache-solr-dataimportscheduler-1.1.jar(增量导入使用). 数据库对应的jdbc驱动包这里使用的是Oracle oracle10g.ja放入Tomcat6.0.36/webapps/sol/WEB-INF/lib 中.

MySQL数据库的修复

- Xin - 博客园-首页原创精华区
找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:. 然后myisamchk 工具会帮助你恢复数据表的索引. 好象也不用重新启动mysql,问题就解决了. 当你试图修复一个被破坏的表的问题时,有三种修复类型. 如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的.

MySQL数据库的IO操作

- - haohtml's blog
         淘宝丁奇分享的PPT:MySQL数据库的IO操作,详细分享了四块的内容,并且告诉大家如何调整MySQL数据库IO操作相关的参数,给出了详细的选择策略,现替其整理成文章分享与此. 4.影响io行为的一些参数和选择策略. 一个简单的查询 select * from t where id>=(  select id from t where k1=100 limit 100000,1) limit 2;.

MySQL数据库优化总结

- - CSDN博客推荐文章
        对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要. 一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小.        一、数据库设计   适度的反范式,注意是适度的.

Google数据库产品LevelDB对决MySQL

- - HTML5研究小组
去年一月份,Google发布了LevelDB. LevelDB是Key-Value嵌入式数据库管理系统编程库,目前的版本能够支持Billion级别的数据量. LevelDB是一个C++库,可按照字符串键值顺序映射. 源于其本身的良好设计,特别是LSM算法,LevelDB性能非常之高. 在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w.

excel数据导入mysql数据库

- - 互联网 - ITeye博客
1、excel另存为txt.       选中将要导出的数据列,然后另存为选择其它格式=>文本文件(制表符分割). E:\项目\fblike\game_code_san.txt. 2、txt导入到mysql数据库. load data infile 'E:\\项目\\fblike\\game_code_san.txt' into table game_code_san(code).