solr配置自动增量更新索引

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

转载于:https://my.oschina.net/kmnztech/blog/776100

    本课程全程使用目前比较流行的开发工具idea进行开发,涉及到目前互联网项目中最常用的高并发解决方案技术, 如dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,springSecurity安全框架,FastDFS分布式文件服务器,还会涉及到代码生成器,   前台的技术有angularJS和BootStrap框架,此课程内容丰富实战性强,如果你还是传统项目的开发人员,那你学完本课程会有很大的收获,让你的薪资上涨,5K以上,让你完全感受到了互联网思维带来的高 并发解决方案的思路,如果你是开发的小白,建议你学完Spring,SpringMVC,MyBatis框架后再来学习本门课程,学完以后会让你完全体验到企业级开发的流程.在职开发人员学完后会让你的薪资更高,让你更了解互联网是如何解决高并发 学完SSM框架的同学就可以学习,能让你切身感受到企业级开发环境目标1:完成solr环境安装、中文分析器和业务域的配置目标2:会使用Spring Data Solr完成增删改查操作目标3:完成批量数据导入功能目标4:完成按关键字搜索功能目标5:实现考拉易购搜索结果高亮显示功能目标6:说出考拉易购搜索的业务规则和实现思路目标7:完成查询分类列表的功能目标8:完成缓存品牌和规格数据的功能目标9:完成显示品牌和规格数据的功能目标10:完成过滤条件构建的功能目标11:完成过滤查询的功能目标11:实现考拉易购价格区间筛选功能目标12:实现搜索结果分页功能目标13:理解多关键字搜索目标14:实现搜索结果排序功能目标15:实现隐藏品牌列表功能目标16:实现搜索页与首页对接功能目标17:完成更新索引的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值