注:在上一篇的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节点前面增加:

?
1
2
3
4
5
<listener>
          <listener-class>
                org.apache.solr.handler.dataimport.scheduler.ApplicationListener
          </listener-class>
</listener>

3.将apache-solr-dataimportscheduler-.jar 中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面  
    4.重启tomcat或者jboss 即可

dataimport.properties 配置项说明

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#################################################
#                                               #
#       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
syncCores=core1,core2
#  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 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,即5天;
#  为空,为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

上文出处: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的配置如下:

?
1
2
3
4
<?xmlversion="1.0"encoding="UTF-8"?>
<ContextdocBase="E:\solrbase\tomcat7\webapps\solr"debug="0"crossContext="true">
    <Environmentname="solr/home"type="java.lang.String"value="E:\solrbase\solr"override="true"/>
</Context>

则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定时实时重建索引和增量更新相关推荐

  1. solr定时实时重建索引和增量更新——sxt

    定时实时重建索引和增量更新 Solr Data Import Handler Scheduler说明: 将 apache-solr-dataimportscheduler-1.0.jar 和solr自 ...

  2. solr4 mysql自动更新_(solr系列:五) solr定时实时重建索引和增量更新

    将mysql中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,那该如何是好呢?该如何实现mysql数据库中的数据定时同步到solr中呢?下面将做详细的介绍. ...

  3. mysql+索引+rebuild_(solr系列:五) solr定时实时重建索引和增量更新

    将mysql中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,那该如何是好呢?该如何实现mysql数据库中的数据定时同步到solr中呢?下面将做详细的介绍. ...

  4. Solr定时重建索引和增量更新

    新增jar包 新增solr-dataimport-scheduler.jar到所有节点tomcat\webapps\下solr项目的WEB-INF\lib下 下载地址: 为Solr配置监听器 修改所有 ...

  5. [搜索] Solr (三) 全量索引与增量索引

    solr.home  D:solr\home solr.war     D:solr\server\solr 参考文档 IBM developerWorks 文档库  Apache Solr 的新特性 ...

  6. 教你如何在 elasticsearch 中重建索引

    序言 Elasticsearch 是一个实时的分布式搜索分析引擎.Teambition 使用 Elastisearch 作为搜索引擎,为用户提供搜索服务,当我们决定存储某种数据时,我们需要使用PUT ...

  7. Solr定时增量更新

    1  概述 将数据库中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,因此需要定时检测数据库中的数据变化,并实时将变化的数据同步到solr中. 2  配置定 ...

  8. 数据增量更新定义_TiDB 在 OPPO 准实时数据仓库中的实践

    作者介绍 OPPO 数据分析与解决方案团队主要负责 OPPO 全集团的大数据分析和解决方案提供,团队成员多来自一线互联网公司及著名高校,在 OPPO 众多场景的大数据应用方面有很深经验,极大的支撑了业 ...

  9. 数据增量更新定义_技术资讯 | TiDB在准实时数据仓库中的实践

    " OPPO大数据中心在2019年初承接了接入某业务线核心数据的重要任务:一期目标是建立一个能提供准实时大数据查询服务的数据仓库. 我们选用了之前从未在公司大规模正式使用过的TiDB作为核心 ...

最新文章

  1. DeepMind开源Psychlab平台——搭建AI和认知心理学的桥梁(附论文和代码下载)
  2. Docker 镜像小结---操作指令介绍(七)
  3. linux虚拟主机管理系统wdcp系列教程之三
  4. Codeforces1063D Candies for Children 【分类讨论】【暴力】
  5. java排序算法代码_Java实现八种排序算法(代码详细解释)
  6. 关于python 中的 sys.argv 的使用方法
  7. SpringData ElasticSearch入门案例
  8. cross component navigation in HCP
  9. 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
  10. java基础9(IO流)-File类
  11. redhat7 配置xmanager登陆
  12. python 实现粒子滤波
  13. 单位内网视频会议怎么开
  14. HDU 4513 吉哥系列故事――完美队形II(Manacher)
  15. BTC隔离见证(3开头)地址离线签名
  16. 音质好的蓝牙耳机有哪些?盘点四款好音质蓝牙耳机
  17. Mathorcup数学建模竞赛第六届-【妈妈杯】A题:基于模糊综合评价和灰色关联度的淡水养殖池塘水华分析、预测及净化模型(附一等奖获奖论文和matlab代码)
  18. 通过点击按钮打开新的窗口
  19. 【Google Chrome浏览器离线安装包下载方法】
  20. bjui的validate表单验证的使用

热门文章

  1. c语言vi运行编译文件,VC++6.0中如何编译运行及调试C语言程序文件.docx
  2. 写代码水平的几个发展阶段
  3. 崩溃日志记录Landroid/support/v4/animation/AnimatorCompatHelper
  4. 《Android UI基础教程》——2.1节创建一个应用
  5. ftp列表错误,flashfxp列表错误,ftp无法列目录的解决方法
  6. DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序;WINAPI开发,无dotNet环境也可顺利执行)【一】整体思路...
  7. [2]-使用busybox-1.17.2制作文件系统
  8. 细粒度权限控制 linux,FGAC(细粒度访问控制)/VPD
  9. java单例模式的应用_java单例模式的简单应用例子
  10. Java需要掌握的底层知识_java程序员需要知道的底层知识(一)