solr系列3——solr数据同步(全量、增量)

solr 数据同步,全量、增量方式

DIH全量同步(全表数据)(一般做第一次数据同步)

  • 首先创建对应的数据库表
  • solr配置
    • 将solr现有数据清空

      cd /usr/local/solr/example/solr/collection1/data && rm -rf * && mkdir index && mkdir tlog

    • 添加数据源配置(@)

      vim /usr/local/solr/example/solr/collection1/conf/solrconfig.xml

      添加配置信息:

      <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
      <str name="config">data-config.xml</str>
      </lst>
      </requestHandler>
    • 在同目录下创建data-config.xml文件,并添加源信息(@)

      vim /usr/local/solr/example/solr/collection1/conf/data-config.xml

      添加配置如下:

       <dataConfig>
          <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/mysolr" user="root" password="123456"/>
          <document>
             <entity name="user" transformer="DateFormatTransformer" query="SELECT id,name,price,url,last_modified FROM user WHERE id >= ${dataimporter.request.id}">
                <field column="id" name="id"/>
                <field column="name" name="name"/>
                <field column="price" name="price"/>
                <field column="url" name="url"/>
                <filed column="last_modified" name="last_modified" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/>
              </entity>
          </document>
      </dataConfig>
      
    • 添加数据同步所需依赖jar到tomcat中solr

      cd /usr/local/solr/dist && cp solr-dataimporthandler-4.10.3.jar solr-dataimporthandler-extras-4.10.3.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/

      同时把mysql驱动添加到/usr/local/tomcat/webapps/solr/WEB-INF/lib/

    • 将需要同步的数据库表字段添加到schema.xml中,如果已存在,则无需
    • 进行数据库访问授权操作,如果已授权则略过

      GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;

    • 时间同步,mysql数据源服务器时间跟solr服务器时间一致

      date -s "2016-04-17 21:15:00" 设置时间 mysql数据源服务器时间一定大于等于solr服务器时间,否则solr检测不到mysql时间变化了(认为是旧数据,增量同步来说

    • 启动tomcat即可。
    • 浏览器访问http://ip:port/solr,点击Dataimport,Command选择full-import,Entity选择要同步的表,Custom Parameters输入data-config.xml中需要的参数(${dataimport.request.id}),点击Execute执行即可。
      solr-HID全量.png

DIH增量同步(新增数据)(常用模式)

  • 只需要对上面全量导入solr配置中带有(@)标示的配置进行修改即可
  • 添加数据源配置(@)

    vim /usr/local/solr/example/solr/collection1/conf/solrconfig.xml

    添加配置信息:

     <requestHandler name="/deltaimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
        <str name="config">delta-data-config.xml</str>
      </lst>
    

</requestHandler>
```

  • 在同目录下创建delta-data-config.xml文件,并添加源信息(@)

    vim /usr/local/solr/example/solr/collection1/conf/delta-data-config.xml

    添加配置如下:

       <dataConfig>
          <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/mysolr" user="root" password="123456"/>
          <document>
             <entity name="user" pk="id" transformer="DateFormatTransformer"
             query="SELECT id,name,price,url,last_modified FROM user WHERE id >= ${dataimporter.request.id}"
             deltaImportQuery="SELECT * FROM user WHERE id = ${dih.delta.id}" deltaQuery="SELECT id FROM user where last_modified > '${dataimporter.last_index_time}' ">
                <field column="id" name="id"/>
                <field column="name" name="name"/>
                <field column="price" name="price"/>
                <field column="url" name="url"/>
                <filed column="last_modified" name="last_modified" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/>
              </entity>
          </document>
      </dataConfig>
    ```
    

    id一致

    solr_pk.png

    last_modified字段要在schema.xml文件中配置,<field name="last_modified" type="date" indexed=true" stored="true"/>

    query : 首先查询出所有满足id > ${dataimporter.request.id} 的数据

    deltaQuery : 从query的数据中查询所有last_modified大于上一次同步${dataimporter.last_index_time}时间的id(即为需要增量同步的数据),该id = ${dih.delta.id}

    deltaImportQuery :根据 deltaQuery 返回的id查找所有信息,为增量同步提供数据源

    ${dih.delta.id} : 记录本次要索引的id

    ${dataimporter.last_index_time} : 最后一次索引的时间,即上一次同步的时间

    注意:last_modified字段很重要,为增量同步提供数据变更依据,一定为时间类型,具体字段名可自定义,同时也要注意solr服务器与mysql服务器时间同步问题

  • 配置完毕,启动tomcat即可。
  • 最后访问,浏览器访问http://ip:port/solr,点击Dataimport,Command选择full-import,Entity选择要同步的表,Custom Parameters输入data-config.xml中需要的参数(${dataimport.request.id}),点击Execute执行即可。
    solr-HID增量.png

全量、增量也可以同时配置。

备注

  • 内存溢出
    在使用 DIH 时,容易报内存溢出错误。可以通过设置 jvm 大小来解决。设置方法如下:
    在tomcat\bin\catalina.sh 加入SET JAVA_OPTS=-Xms128m -Xmx1024m 配置 这里设置的是1024M,根据情况可以适量增大 
    ```
    
  • 手动全量、增量操作

    可以通过solr管控台操作,也可以直接在浏览器输入链接直接操作

    全导入:
    http://192.168.58.144:8080/solr/collection1/dataimport?command=full-import&commit=ture
    增量导入:
    http://192.168.58.144:8080/solr/collection1/deltaimport?command=delta-import&clean=false&commit=ture
    查看导入状态
    http://192.168.58.144:8080/solr/collection1/dataimport?command=status
  • 定时增量同步(全量不支持定时同步--没必要)
    • Solr官方提供了很强大的Data Import Request Handle
    • apache-solr-dataimportscheduler-1.0.jar 拷贝到/usr/local/tomcat/lib/目录下
    • 修改solr.war中的web.xml文件

      cd /usr/local/tomcat/webapps/solr/WEB-INF/web.xml
      添加以下配置信息:

      <listener>
      <listener-class>
      org.apache.solr.handler.dataimport.scheduler.ApplicationListener
      </listener-class>
      </listener>
    • tomcatsolr.warweb.xml配置的solr.home下创建conf文件夹,并新建文件dataimport.properties,配置定时任务依赖信息
      solr-tomcat配置目录.png

      cd /usr/local/solr/example/solr && mkdir conf && cd conf && vim dataimport.properties

      dataimport.properties文件信息如下:

      # dataimport.properties example
      #
      # From this example, copy everything bellow "dataimport scheduler properties" to your
      #   dataimport.properties file and then change params to fit your needs
      #
      # IMPORTANT:
      # Regardless of whether you have single or multiple-core Solr,
      #   use dataimport.properties located in your solr.home/conf (NOT solr.home/core/conf)
      # For more info and context see here:
      # http://wiki.apache.org/solr/DataImportHandler#dataimport.properties_example
      #Tue Jul 21 12:10:50 CEST 2010
      last_index_time=2016-04-19 15\:28\:37
      user.last_index_time=2016-04-19 15\:28\:37
      #################################################
      #                                               #
      #       dataimport scheduler properties         #
      #                                               #
      #################################################
      #
      # http://192.168.58.144:8080/solr/collection1/deltaimport?command=delta-import&clean=false&commit=ture   
      # 以下参数对应参数
      # http://server:port/webapp/syncCores/params
      #
      #  to sync or not to sync
      #  1 - active; anything else - inactive
      syncEnabled=1
      #
      #  which cores to schedule
      #  in a multi-core environment you can decide which cores you want syncronized
      #  leave empty or comment it out if using single-core deployment
      syncCores=collection1
      #
      #  solr server name or IP address
      #  [defaults to localhost if empty]
      server=localhost
      #
      #  solr server port
      #  [defaults to 80 if empty]
      port=8080
      #
      #  application name/context
      #  [defaults to current ServletContextListener's context (app) name]
      webapp=solr
      #
      #  URL params [mandatory]
      #  remainder of URL
      #增量url
      params=/deltaimport?command=delta-import&clean=false&commit=ture
      #
      #  schedule interval
      #  number of minutes between two runs
      #  [defaults to 30 if empty]
      #  定时更新间隔时间,单位分钟
      interval=1
      
  • 配置完毕,启动tomcat即可。

定时增量备注: 如果想支持定时重做索引,只需要将上面引入的jar更换为solr-dataimportscheduler-1.1.jar,在dataimport.properties中添加三行配置即可,实质就是全量同步

#  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=1
#
#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
#
#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2016-04-19 05:00:00 或者  05:00:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=05:00:00
相关文件如下:
[solr-dataimportscheduler-1.1](C:\Users\ljdo\Desktop\笔记\file\solr\solr-dataimportscheduler-1.1.jar)
[solr-dataimportscheduler-1.1-source](C:\Users\ljdo\Desktop\笔记\file\solr\solr-dataimportscheduler-1.1-source.zip)
[dataimport.properties.zip](C:\Users\ljdo\Desktop\笔记\file\solr\dataimport.properties.zip)
[apache-solr-dataimportscheduler-1.0](http://solr-dataimport-scheduler.googlecode.com/files/apache-solr-dataimportscheduler-1.0.jar)
[apache-solr-dataimportscheduler-1.0-with-source](http://solr-dataimport-scheduler.googlecode.com/files/apache-solr-dataimportscheduler-1.0-with-source.jar)

作者:逐暗者 *(转载请注明出处)*
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容