Solr4.7.1定時更新(apache-solr-dataimportscheduler)


   Solr官方提供了很強大的Data Import Request Handler,同時提供了一個簡單的 Scheduler,示例中的 Scheduler 只支持增量更新,不支持定期重做索引,因此我做了一個簡單的封裝,增加了重做索引的定時器。

        1. 將 apache-solr-dataimportscheduler-1.0.jar 和solr自帶的 solr-dataimporthandler-4.7.1.jar、 solr-dataimporthandler-extras-4.7.1.jar 放到tomcat發布的webapps/solr/WEB-INF/lib目錄下面(或者放到solr.war的lib目錄下面)。
        2.修改tomcat發布的webapps/solr/WEB-INF/web.xml(或者修改solr.war中WEB-INF/web.xml), 在servlet節點前面增加:

 

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

        3.將apache-solr-dataimportscheduler-1.0-source.jar 中 dataimport.properties 取出並根據實際情況修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目錄下面,conf這個目錄不存在,需要自己手動創建該目錄即可(比如說實例放在solrHome目錄中,conf也建在solrHome中)。

 

        4.重啟tomcat或者jboss 即可。

 

dataimport.properties 配置項說明

 

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

#是否激活定時增量索引功能,1-激活,其他-不激活
syncEnabled=1

#需要定時增量索引的core,多core中間逗號隔開
syncCores=collection1,collection2

#solr服務器名或IP地址,默認localhost
server=localhost

#solr服務器端口,默認80
port=8090

#應用名
webapp=solr

#增量索引參數
params=/dataimport?command=delta-import&clean=ture&commit=true

#增量索引執行間隔(分鍾數),如果為空,默認30
interval=1


#上面是solr官方支持的功能參數
#下面三個參數是別人為了實現重做索引而設置的參數,如果不需要重做索引,可以刪除
#重做索引的時間間隔(分鍾),默認7200,即1天,為空,為0,或者注釋掉:表示永不重做索引
reBuildIndexInterval=2

#重做索引的參數
reBuildIndexParams=/dataimport&command=full-import&clean=true&commit=true

# 重做索引時間間隔的計時開始時間,第一次真正執行的時間=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 兩種格式:2012-04-11 03:10:00或者03:10:00,后一種會自動補全日期部分為服務啟動時的日期
reBuildIndexBeginTime=15:40:00



 

 

 
        

 

 

        對於以上配置,發現兩個bug,一個是如果reBuildIndexBeginTime的值為空,則會導致interval強轉時報錯,另一個是請求solr服務器時返回的狀態碼永遠是415(對於當前請求的方法和所請求的資源,請求中提交的實體並不是服務器中所支持的格式,因此請求被拒絕。)

        1、第一個bug

        這一塊代碼直接導致一下方法調用的時候報強轉錯,

        這個方法對interval屬性進行了強轉,

        看如果reBuildIndexBeginTime為空時的設置的代碼:

        以上紅框是更改后的格式,原格式只有“yyyy-MM-dd”部分,這樣會導致啟動的時候會不停地http請求solr服務器,因此需加“HH:mm:ss”,以此解決問題。
        第一個bug解決方法把圖1中畫紅框的代碼去除就行了。

        2、第二個bug

        導致原因是HTTP以post請求,我們知道dataimport.properties的param是以get方式的鏈接,參數也包含在里面,程序未對此鏈接形式做處理封裝成post提交方式,所以導致請求solr失敗,把Http鏈接方式改成get就行了。

 

修復bug,重新打包后的jar下載:

solr-dataimportscheduler-1.1

solr-dataimportscheduler-1.1-source

dataimport.properties.zip

dataimport.properties.zip解壓到tomcat的solr.xml里配置的solr/home路徑,里面含有conf文件夾及dataimport.properties。

原jar下載:

apache-solr-dataimportscheduler-1.0.jar 

apache-solr-dataimportscheduler-1.0-with-source.jar

上面jar包的集合:

https://pan.baidu.com/s/1jRJyZXAmuCxCvx49ku-ltQ

solr4.7.1下載

https://pan.baidu.com/s/1m2zbXS6BxjI3IeT4szixkQ

 

solr教案和solr基礎配置說明

 

https://pan.baidu.com/s/1Qk6DT-bsZuPRBvoIi8ERYQ

 

其它方式更新索引參考:

https://blog.csdn.net/u010942465/article/details/51347923

https://blog.csdn.net/u010942465/article/details/51354016


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM