solr定时实时重建索引和增量更新
2015-01-26 14:40
459 查看
注:在上一篇的solr增量索引中遇到了一个很大的问题:定时任务一直无法执行,后来找了很多原因,分析日志后发现增量索引的请求都没发送,又经过一番折腾才在网上找到了解决方法,是apache-solr-dataimportscheduler-1.0.jar的一个bug,post请求无法正确发送,这位仁兄的文章真是精华所在,感谢这位仁兄!
Solr Data Import Hander Scheduler 说明:
Solr官方提供了很强大的Data Import Request Handler,同时提供了一个简单的 Scheduler,
示例中的 Scheduler 只支持增量更新,不支持定期重做索引,因此我做了一个简单的封装,增加了重做索引的定时器.
(原定时器作者是:Marko Bonaci, 在此表示感谢!)The original Scheduling source by Marko Bonaci, Thank him!
使用说明
1. 将 apache-solr-dataimportscheduler-1.0.jar 和solr自带的 apache-solr-dataimporthandler-.jar, apache-solr-dataimporthandler-extras-.jar 放到solr.war的lib目录下面
2.修改solr.war中WEB-INF/web.xml, 在servlet节点前面增加:
?
3.将apache-solr-dataimportscheduler-.jar
中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面
4.重启tomcat或者jboss 即可
dataimport.properties 配置项说明
?
上文出处:http://code.google.com/p/solr-dataimport-scheduler/
博主ps:
如果你运行报以下异常:
org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.apache.solr.handler.dataimport.scheduler.ApplicationListener
java.lang.NullPointerException
at org.apache.solr.handler.dataimport.scheduler.ApplicationListener.contextInitialized(ApplicationListener.java:93)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
那说明你dataimport.properties的存放位置不正确,注意第3点,dataimport.properties存放在tomcat的solr.xml里配置的solr/home路径的conf文件夹下,conf文件夹是没有的,需新建。
例如solr.xml的配置如下:
?
则dataimport.properties位置是:E:\solrbase\solr\conf\dataimport.properties
dataimport.properties属性文件param配置项示例:
例如:/deltaJob?command=delta-import&clean=false&commit=true& optimize=false&wt=json&indent=true&entity=companyJob&verbose=false&debug=false
上面链接根据实际solrconfig.xml和db-config.xml里配置文件里情况来定的。
发现两个bug,一个是如果reBuildIndexBeginTime的值为空,则会导致interval强转时报错,另一个是请求solr服务器时返回的状态码永远是415(对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。),
为什么了?
先看第一个bug,
看代码:
图1
这一块代码直接导致一下方法调用的时候报强转错,
图2
这个方法对interval属性进行了强转
图3
看如果reBuildIndexBeginTime为空时的设置的代码:
图4
以上红框是更改后的格式,原格式只有“yyyy-MM-dd”部分,这样会导致启动的时候会不停地http请求solr服务器,因此需加“HH:mm:ss”,以此解决问题。
第一个bug解决方法把图1中画红框的代码去除就行了。
第二个bug,看代码:
图4
导致原因是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
转自:http://www.sxt.cn/u/756/blog/4231
Solr Data Import Hander Scheduler 说明:
Solr官方提供了很强大的Data Import Request Handler,同时提供了一个简单的 Scheduler,
示例中的 Scheduler 只支持增量更新,不支持定期重做索引,因此我做了一个简单的封装,增加了重做索引的定时器.
(原定时器作者是:Marko Bonaci, 在此表示感谢!)The original Scheduling source by Marko Bonaci, Thank him!
使用说明
1. 将 apache-solr-dataimportscheduler-1.0.jar 和solr自带的 apache-solr-dataimporthandler-.jar, apache-solr-dataimporthandler-extras-.jar 放到solr.war的lib目录下面
2.修改solr.war中WEB-INF/web.xml, 在servlet节点前面增加:
?
中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面
4.重启tomcat或者jboss 即可
dataimport.properties 配置项说明
?
博主ps:
如果你运行报以下异常:
org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.apache.solr.handler.dataimport.scheduler.ApplicationListener
java.lang.NullPointerException
at org.apache.solr.handler.dataimport.scheduler.ApplicationListener.contextInitialized(ApplicationListener.java:93)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
那说明你dataimport.properties的存放位置不正确,注意第3点,dataimport.properties存放在tomcat的solr.xml里配置的solr/home路径的conf文件夹下,conf文件夹是没有的,需新建。
例如solr.xml的配置如下:
?
dataimport.properties属性文件param配置项示例:
例如:/deltaJob?command=delta-import&clean=false&commit=true& optimize=false&wt=json&indent=true&entity=companyJob&verbose=false&debug=false
上面链接根据实际solrconfig.xml和db-config.xml里配置文件里情况来定的。
发现两个bug,一个是如果reBuildIndexBeginTime的值为空,则会导致interval强转时报错,另一个是请求solr服务器时返回的状态码永远是415(对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。),
为什么了?
先看第一个bug,
看代码:
图1
这一块代码直接导致一下方法调用的时候报强转错,
图2
这个方法对interval属性进行了强转
图3
看如果reBuildIndexBeginTime为空时的设置的代码:
图4
以上红框是更改后的格式,原格式只有“yyyy-MM-dd”部分,这样会导致启动的时候会不停地http请求solr服务器,因此需加“HH:mm:ss”,以此解决问题。
第一个bug解决方法把图1中画红框的代码去除就行了。
第二个bug,看代码:
图4
导致原因是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
转自:http://www.sxt.cn/u/756/blog/4231
相关文章推荐
- solr4.7.1定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新
- (solr系列:五) solr定时实时重建索引和增量更新
- 【修改的版本】solr定时实时重建索引和增量更新
- solr定时实时重建索引和增量更新——sxt
- solr定时实时重建索引和增量更新
- solr6.6定时实时重建索引和增量更新
- Solr 4.x定时、实时增量索引 - 修改、删除和新增索引
- Solr 4.x定时、实时增量索引 - 修改、删除和新增索引
- solr定时实时重建索引和增量更新
- solr6.0 -MySQL定时增量、全量更新索引
- sphinx增量索引和主索引来实现索引的实时更新
- solr 定时全量索引 增量索引与dataimporter.properties 配置
- solr之定时增量索引实现
- Solr全量索引、增量索引和定时增量索引配置
- sphinx增量索引和主索引来实现索引的实时更新
- [Solr] (源) Solr与MongoDB集成,实时增量索引
- solr定时更新索引