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的在mac上的安装配置以及同步mysql数据

solr的在mac上的安装配置以及同步mysql数据

solr4.9同步mysql数据

solr 7+tomcat 8 + mysql实现solr 7基本使用(安装集成中文分词器定时同步数据库数据以及项目集成)

[jjzhu学java]之solr4.9同步mysql数据

[jjzhu学java]之solr4.9同步mysql数据