solr配置自动增量更新索引

lucene&solr 专栏收录该内容
2 篇文章 0 订阅

Solr本地环境

1、首先从apache下载最新的solr包,我这里下载到的是4.9的solr包,解压出来以后,把目录下的example文件夹下面所有的文件拷贝到c盘solr目录内,作为solr的运行目录。
2、在该目录内新建一个bat文件,内容如下:
set TITLE=solr
java -Dsolr.solr.home=C:/solrhome -jar start.jar

这个bat文件就可以直接用jetty启动solr

3、本地的数据库表是tf_question主键为QID

配置自动增量更新(删除)索引

1、在C:\solr\solr-webapp\webapp\WEB-INF目录修改web.xml文件,增加一个监听

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

2、将必须的jar包拷贝到C:\solr\solr-webapp\webapp\WEB-INF\lib目录

所需jar包是:mysql jdbc驱动包(我用的mysql)

solr-dataimporthandler-4.9.0.jar、solr-dataimporthandler-extras-4.9.0.jar  (这两个jar在solr官方的包里面有)

solr-dataimportscheduler-1.1.jar(这个是下载别人修改过的,来源是https://code.google.com/p/solr-data-import-scheduler/

3、编辑C:\solrhome\jyask\conf目录下的schema.xml文件,增加数据库表对应字段映射和主键映射

   <field name="_version_" type="long" indexed="true" stored="true"/>
   
   <field name="_root_" type="string" indexed="true" stored="false"/>

   <field name="QID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        
   <field name="TITLE" type="text" indexed="true" stored="true" multiValued="false"/>

   <field name="CONTENT" type="text" indexed="true" stored="true" multiValued="false"/>

   <field name="CREATETIME" type="tdate" indexed="true" stored="true" multiValued="false"/>

   <field name="SORT_ORDER" type="int" indexed="true" stored="true" multiValued="false"/>
   
   <field name="ISPUBLIC" type="int" indexed="true" stored="true" multiValued="false"/>

  <field name="HIDENAME" type="int" indexed="true" stored="true" multiValued="false"/>

  <field name="QTYPE" type="int" indexed="true" stored="true" multiValued="false"/>

  <field name="QSTATUS" type="int" indexed="true" stored="true" multiValued="false"/>

  <field name="QUSERID" type="string" indexed="true" stored="true" multiValued="false"/>

  <field name="QUSERNAME" type="string" indexed="true" stored="true" multiValued="false"/>
   
  <uniqueKey>QID</uniqueKey>

4、在C:\solrhome\jyask\conf 目录下的solrconfig.xml里配置Handler:(jyask就是我的solr的core)

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

5、在该目录里面新增一个jyask-data-config.xml文件,配置sql逻辑和映射field。

    <dataConfig>  
        <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.16:3306/edpublic?useUnicode=true&characterEncoding=utf-8" user="root" password="xtroot1121"  batchSize="-1" /> 
        <document>  
            <entity name="jyselect" pk="QID" query="SELECT QID,TITLE,CONTENT,QUSERID,QUSERNAME,CREATETIME,QSTATUS,SORT_ORDER,HIDENAME,ISPUBLIC,QTYPE FROM tf_question" deltaQuery="select QID,TITLE,CONTENT,QUSERID,QUSERNAME,CREATETIME,QSTATUS,SORT_ORDER,HIDENAME,ISPUBLIC,QTYPE from tf_question where CURRENTTIME > '${dataimporter.last_index_time}'" deltaImportQuery="SELECT QID,TITLE,CONTENT,QUSERID,QUSERNAME,CREATETIME,QSTATUS,SORT_ORDER,HIDENAME,ISPUBLIC,QTYPE FROM tf_question where QID= '${dataimporter.delta.QID}'" deletedPkQuery="select QID from tf_question where QSTATUS=0">  
                <field column="QID" name="QID"/>
                <field column="TITLE" name="TITLE"/>
                <field column="CONTENT" name="CONTENT"/>
                <field column="QUSERID" name="QUSERID"/>
                <field column="QUSERNAME" name="QUSERNAME"/>
                <field column="CREATETIME" name="CREATETIME"/>
                <field column="QSTATUS" name="QSTATUS"/>
                <field column="SORT_ORDER" name="SORT_ORDER" />
                <field column="HIDENAME" name="HIDENAME"/>
                 <field column="ISPUBLIC" name="ISPUBLIC"/>
                <field column="QTYPE" name="QTYPE"/>
            </entity>  
        </document>  
    </dataConfig>  

PK为表的主键,这个要跟schema.xml里面的主键映射相同(<uniqueKey>QID</uniqueKey>)

如果里面的字段名和schema.xml配置的field的字段名是一样的,这里就不需要配置field,我这里还是加上了。

pk一定要有、deltaQuery和deltaImportQuery是增量更新必须要有的、deletedPkQuery是删除用的,比如说不需要索引那些删除标志是true的,就可以加上这个,如果在DIH的时候不需要删除,就把deletedPkQuery去掉。

如果字段有oracle的clob类型的话,entity要加上一个属性:transformer="ClobTransformer",并且字段field要加上一个属性clob="true"。比如说:<field column="CONTENT" name="CONTENT" clob="true"/>,其中CLBO字段的column必须大写!

6、在C:\solrhome新建一个conf文件夹,放入dataimport.properties文件:

#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
#################################################

#  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需要导入的core,多个以,隔开
syncCores=jyask

#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost

#  solr server port
#  [defaults to 80 if empty]
port=8983

#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr

#  URL params [mandatory]
#  remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true

#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
interval=1

#  重做索引的时间间隔,单位分钟,默认7200,即1天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200

#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true

#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

全部配置完成,以上。


另:solr的http命令:

全部导入,清除所有之前内容:http://localhost:8983/solr/jyask/dataimport?command=full-import&clean=true&commit=true

增量导入,不删除之前内容:http://localhost:8983/solr/jyask/dataimport?command=delta-import&clean=false&commit=true

查看导入的状态(结果):http://localhost:8983/solr/jyask/dataimport?command=status


参考链接:http://www.solr.cc/blog/?page_id=1365

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值