博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr定时更新
阅读量:6368 次
发布时间:2019-06-23

本文共 2741 字,大约阅读时间需要 9 分钟。

今天用到solr定时重建索引和增量更新技术,就从网上搜了一些资料,在这里给大家整理了一下,也经过了自己的测试,没有异常。

        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节点前面增加:

 

org.apache.solr.handler.dataimport.scheduler.ApplicationListener

        3.将apache-solr-dataimportscheduler-1.0-source.jar 中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面,conf这个目录不存在,需要自己手动创建该目录即可。

 

        4.重启tomcat或者jboss 即可。

 

dataimport.properties 配置项说明

 

##################################################                                               ##       dataimport scheduler properties         ##                                               ###################################################  to sync or not to sync#  1 - active; anything else - inactivesyncEnabled=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 deploymentsyncCores=core0,core1#  solr server name or IP address#  [defaults to localhost if empty]server=localhost#  solr server port#  [defaults to 80 if empty]port=8080#  application name/context#  [defaults to current ServletContextListener's context (app) name]webapp=solr#  URL params [mandatory]#  remainder of URLparams=/dataimport?command=delta-import&clean=false&commit=true#  schedule interval#  number of minutes between two runs#  [defaults to 30 if empty]#  增量索引的时间间隔,单位分钟#  为空,为0,或者注释掉:表示永不增量索引interval=1#  重做索引的时间间隔,单位分钟,默认7200,即5天; #  为空,为0,或者注释掉:表示永不重做索引reBuildIndexInterval=2#  重做索引的参数reBuildIndexParams=/dataimport?command=full-import&clean=false&commit=true#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期reBuildIndexBeginTime=03:10: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就行了。

 

        关于上面提到apache-solr-dataimportscheduler-1.0.jar和apache-solr-dataimportscheduler-1.0-source.jar的原jar包和重新打包的在以下地址中

转载于:https://www.cnblogs.com/jinhaoObject/p/4977374.html

你可能感兴趣的文章
Linux系统各发行版镜像下载
查看>>
JS获取键盘按下的键值event.keyCode,event.charCode,event.which的兼容性
查看>>
查看ORACLE 数据库及表信息
查看>>
腾讯、百度、阿里面试经验—(1) 腾讯面经
查看>>
Codeforces Round #374 (Div. 2) D. Maxim and Array 贪心
查看>>
HTML DOM 教程Part1
查看>>
GBDT的基本原理
查看>>
MySQL修改root密码的多种方法(转)
查看>>
MongoDB 基础命令——数据库表的增删改查——遍历操作表中的记录
查看>>
.NET Core 跨平台发布(dotnet publish)
查看>>
Activity入门(一)
查看>>
CentOS下如何从vi编辑器插入模式退出到命令模式
查看>>
Mysql索引的类型
查看>>
Eclipse debug模式 总是进入processWorkerExit
查看>>
Nginx的https配置记录以及http强制跳转到https的方法梳理
查看>>
[每天五分钟,备战架构师-1]操作系统的类型和结构
查看>>
springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解...
查看>>
关于Boolean类型做为同步锁异常问题
查看>>
TestLink运行环境:Redhat5+Apache2.2.17+php-5.3.5+MySQL5.5.9-1
查看>>
Get File Name from File Path in Python | Code Comments
查看>>