当前位置:首页 » 电脑基础知识

Solr定时增量更新

2017-08-08 18:22 本站整理 浏览(6)

一、定时任务执行

很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题。
但是更方便,更加与Solr本身集成度高的是利用其自身的定时增量导入功能。

二、配置

1、下载apache-solr-dataimportscheduler.jar放到Tomcat的webapps的solr目录的WEB-INF的lib目录下:

下载链接:http://pan.baidu.com/s/1bpGnqJt

2、修改solr中WEB-INF/web.xml, 在servlet节点前面增加:

<listener>  
          <listener-class>  
                org.apache.solr.handler.dataimport.scheduler.ApplicationListener  
          </listener-class>  
</listener> 

3、 在solr_home\solr下新建conf文件夹,放入下载的dataimport.properties

下载链接: http://pan.baidu.com/s/1dFitqJf

4、编辑solr_home\solr\my_core\conf下的db-data-config.xml

<dataConfig>
    <dataSource name="source1"  type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull" user="root" password="123456"/>

    <span style="white-space:pre">    </span><document>    
        <span style="white-space:pre">    </span>
        <entity name="speech" dataSource="source1"     
                query="select * from  speech"    
                deltaImportQuery="select * from speech where id='${dih.delta.id}'"    
                deltaQuery="select id from speech where create_time > '${dataimporter.last_index_time}'">    
        <!-- name属性,就代表着一个文档,可以随便命名 -->
        <!-- query是一条sql,代表在数据库查找出来的数据 -->
            <!-- 每一个field映射着数据库中列与文档中的域,column是数据库列,name是solr的域(必须是在managed-schema文件中配置过的域才行) -->
            <field column="id" name="s_id"/>
            <field column="content" name="s_content"/>
            <field column="operator" name="s_operator"/>
            <field column="person_synopsis" name="s_person_synopsis"/>
            <field column="person_title" name="s_person_title"/>
        </entity>
    </document>
</dataConfig>

5、重启tomcat,每隔1分钟会进行定时查询并进行增量更新。(这时你可以往数据库新增一条记录,等一分钟后query你会发现多出一条索引)

6、成功更新索引后,会同时更新solr_home\solr\my_core\conf下的dataimport.properties文件

#Mon Aug 07 16:11:13 CST 2017
last_index_time=2017-08-07 16\:11\:13
speech.last_index_time=2017-08-07 16\:11\:13