阿哥论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 456|回复: 0

SOLR研究第五弹:SOLR与数据库(ORACLE,MYSQL)关联做增量更新

[复制链接]

2011

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2015-7-6 14:12:06 |显示全部楼层
solr研究第五弹:SOLR与数据库(Oracle,MySQL)关联做增量更新
配置solr下的solrconfig.xml文件,加入:
  1. <span style="background-color: white;"><font color="#000000"><!--数据源-->
  2. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  3. <lst name="defaults">
  4. <str name="config">/opt/solr/core0/conf/data-config.xml</str>
  5. </lst>
  6. </requestHandler></font></span>
复制代码
其中涉及到文件data-config.xmlmysql的配置如下:
  1. <span style="background-color: white;"><font color="#000000"><dataConfig>
  2. <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/数据库名?useUnicode=true&char
  3. acterEncoding=utf8" user="数据库帐号" password="数据库密码" />
  4. <document name="documents">
  5. <entity name="doc" pk="id"
  6. query="select * from 表格"
  7. deltaImportQuery="select * from 表格 where id='${dataimporter.delta.id}'"
  8. deltaQuery="select id from 表格 where 最后更新字段如last_index_time > '${dataimporter.last_index_time}'"
  9. >
  10. <field column="id" name="id" />
  11. <field column="name" name="name" />
  12. </entity>
  13. </document>
  14. </dataConfig></font></span>
复制代码
oracle的配置如下:
  1. <span style="background-color: white;"><font color="#000000"><dataConfig>
  2. <dataSource type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:端口号:库名" u
  3. ser="数据库帐号" password="数据库密码"/>
  4. <document name="messages">
  5. <entity name="message" pk="ID" transformer="ClobTransformer"
  6. query="select * from 表格 WHERE ISDELETED=0"
  7. deletedPkQuery="select * from 表格 where ISDELETED=1"
  8. deltaQuery="select id from 表格 where 数据更新字段如last_index_time > '${dataimporter.last_index_time}'"
  9. >
  10. <field column="ID" name="ID"/>
  11. <field column="NAME" name="NAME"/>
  12. </entity>
  13. </document>
  14. </dataConfig></font></span>
复制代码
增量部分为其中的:
  1. <span style="background-color: white;"><font color="#000000"><entity name="message" pk="ID" transformer="ClobTransformer"
  2. query="select * from 表格 WHERE ISDELETED=0"
  3. deletedPkQuery="select * from 表格 where ISDELETED=1"
  4. deltaQuery="select id from 表格 where 数据更新字段如last_index_time > '${dataimporter.last_index_time}'"
  5. ></font></span>
复制代码

query:获取数据元,读取正常状态(isdeleted=0)的数据

deletedpkquery:增量删除,数据库标记isdeleted=1后,更新solr删除文档

deltaQuery语句是用于增量导入(Delta Import)中获取符合增量导入标准的数据的主键的SQL,供deltaImportQuery查询使用。它将数据表中每一笔记录执行写操作的时候更新字段last_index_time为当前系统时间,这句sql是从数据表中取出更新字段比solr上次更新时间晚的记录,加入或更新到solr索引。

deltaImportQuery语句增量导入(Delta Import)中获取需要增量索引数据(document)的字段(field)

其中执行完成后会在本地conf目录下生成文件:dataimport.properties,授予该文件写权限,每次solr执行索引后会更新记录,如内容:

  1. <span style="background-color: white;"><font color="#000000">#Tue Jul 17 12:36:41 CST 2012
  2. last_index_time=2012-07-17 12\:17\:27
  3. message.last_index_time=2012-07-17 12\:17\:27</font></span>
复制代码

其中last_index_time为上次索引时间。

关于执行地址DataImportHandler:

批量导入(full-import):

http://localhost:8080/solr/dataimport?command=full-import&commit=true

增量导入(delta-import):
http://localhost:8080/solr/dataimport?command=delta-import&commit=true

导入状态查询(status):
http://localhost:8080/solr/dataimport

重新装载配置文件(reload-config):
http://localhost:8080/solr/dataimport?command=reload-config

终止导入(abort):
http://localhost:8080/solr/dataimport?command=abort


出处:http://blog.duteba.com/technology/article/70.htm
SOLR研究第五弹:SOLR与数据库(ORACLE,MYSQL)关联做增量更新

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部