solr+mysql数据同步配置
Posted zfszhangyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr+mysql数据同步配置相关的知识,希望对你有一定的参考价值。
这两天在网上连续踩了N个坑,使我坚定一定要把这个简单但容易出错的配置一步一步的记录下来。
solr版本5.5.3 下载链接:http://apache.fayea.com/lucene/solr/5.5.3/solr-5.5.3.tgz
上一篇博文中我已经完成了数据如何从mysql中导入到solr。
基本要添加修改的文件是自定义core下面conf中:schema.xml db-data-config.xml solrconfig.xml
今天在这基础上做同步其实一样主要修改两个文件:schema.xml db-data-config.xml
如下:db-data-config.xml (注意这个文件非常关键以下每个关键字大小写都得正确才行,特别是 deletedPKQuery select id where条件等)
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/db_ldjs" user="root" password="123456"/>
<document name="testmysqladdDoc">
<entity name="tb_solr_add"
pk="id"
query="select id,province,city,company,name,mobile,total,flg,modify_time,is_deleted from tb_solr_add where is_deleted=0"
deltaImportQuery="select id,province,city,company,name,mobile,total,flg,modify_time,is_deleted from tb_solr_add where ID='$dih.delta.id'"
deltaQuery="select id from tb_solr_add where modify_time> '$dataimporter.last_index_time' and is_deleted=0"
deletedPkQuery="select id from tb_solr_add where is_deleted=1">
<field column="id" name="id"/>
<field column="province" name="province"/>
<field column="city" name="city"/>
<field column="company" name="company"/>
<field column="name" name="name"/>
<field column="mobile" name="mobile"/>
<field column="total" name="total"/>
<field column="flg" name="flg"/>
<field column="modify_time" name="modify_time"/>
<field column="is_deleted" name="is_deleted"/>
</entity>
</document>
</dataConfig>
schema.xml:中字段定义如下:
<!-- <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> -->
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="province" type="string" indexed="true" stored="true" />
<field name="city" type="string" indexed="true" stored="true" />
<field name="company" type="string" indexed="true" stored="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="mobile" type="string" indexed="true" stored="true" />
<field name="total" type="string" indexed="true" stored="true" />
<field name="flg" type="string" indexed="true" stored="true" />
<field name="modify_time" type="date" indexed="true" stored="true" />
<field name="is_deleted" type="boolean" indexed="true" stored="true" />
mysql数据库的表定义如下:
-- ----------------------------
-- Table structure for `tb_solr_add`
-- ----------------------------
DROP TABLE IF EXISTS `tb_solr_add`;
CREATE TABLE `tb_solr_add` (
`id` bigint(18) NOT NULL AUTO_INCREMENT,
`province` varchar(255) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`company` varchar(100) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
`mobile` varchar(20) NOT NULL DEFAULT '',
`total` decimal(40,0) DEFAULT NULL,
`flg` varchar(3) NOT NULL DEFAULT '',
`modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标记 1:表示已经删除,0:正常',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;
定时部分:
建议直接用Linux的crontab
时间自己设置一下
首先你要full-import一下,后面可以设置每分钟更新一次:
#00 20 * * * curl "http://localhost:8283/solr/ndc-prod-customer-2/dataimport?command=delta-import&clean=false&commit=true"; 这样就OK了 你无论是在mysql数据库中 update,insert,还是delete 就都会同步到solr中 但是delete的话我们在mysql中做的逻辑删除 update tb_solr_add set is_deleted=1 where id=9
以上是关于solr+mysql数据同步配置的主要内容,如果未能解决你的问题,请参考以下文章
solr 7+tomcat 8 + mysql实现solr 7基本使用(安装集成中文分词器定时同步数据库数据以及项目集成)