• 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

  • 相关阅读:
    Package manager has died异常PackageInfo 引发 Crash
    Android Bitmap变迁与原理解析(4.x-8.x)
    Rxjava2不能再发射Null了
    [转]C语言的int最值问题,以及原码反码及补码
    自定义gradle插件
    ReentrantLock(重入锁)的使用
    HashSet、TreeSet和LinkedHashSet分别基于HashMap、TreeMap和LinkedHashMap
    Java类加载双亲委托模式优点
    为什么HTTPS比HTTP安全,以及两者的优缺点
    android4.4之后的HttpUrlConnection的实现是基于okhttp
  • 原文地址:https://www.cnblogs.com/package-java/p/12097245.html
Copyright © 2020-2023  润新知