solr7.4定时/实时更新/重建索引配置,及报错404问题解决方案

简介:  本文分两部分:一、Solr定时/实时更新/重建索引配置。二、Solr7+版本,服务器启动报错,页面404解决方案。
+关注继续查看

 

本文分两部分:

一、Solr定时/实时更新/重建索引配置。

二、Solr7+版本,服务器启动报错,页面404解决方案。(重点)


 

一、solr定时/实时更新/重建索引配置

准备工作要做好:

    1、下载jar包:solr-dataimportscheduler-1.1.jar (网上也有1.0版本,但是具体对应solr版本请自行查找)

下载地址:http://pan.baidu.com/s/1hsySs2S

     注意注意注意(重要的事情说三遍):当solr7+以上版本时,该jar包会有问题,配置后服务器启动会报错,页面404,具体详情后面会有解决方案。

     2、新建文件:dataimport.properties,文件复制下面的就好,具体配置含义已给出注释:


#################################################
#                                               #
#       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
#  修改成你所使用的core,我这里是我自定义的core:simple
syncCores=product_auto
 
#  solr server name or IP address
#  [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost
 
#  solr server port
#  [defaults to 80 if empty]
#  安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8080
 
#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
#  这里默认不改
webapp=solr
 
#  URL params [mandatory]
#  remainder of URL
#  这里改成下面的形式,solr同步数据时请求的链接
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=/select?qt=/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

准备好这一个jar包和dataimport.properties文件,开始下面的步骤……

步骤一:将solr-dataimportscheduler-1.1.jar包复制到apache-tomcat-7.0.72\webapps\solr\WEB-INF\lib中。

步骤二:在apache-tomcat-7.0.72\webapps\solr\WEB-INF目录下的web.xml文件中添加监听配置(<servlet>标签前面):

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

注意(又一个注意的地方):org.apache.solr.handler.dataimport.scheduler.ApplicationListener 后面不能有空格,否则可能会报错,且很难发现问题原因。

步骤三:在\solrhome目录下新建一个conf文件夹(与simple文件夹同目录),将dataimport.properties文件放在conf文件夹中。

步骤四:重启tomcat,访问Solr。

大部分人应该到这里就搞定了。


但是,但是,但是 这个坑被我踩到了!!!

二、Solr7+版本,服务器启动报错,页面404解决方案。

但是本人使用Solr版本为7.4 在按照上述教程配置后,Tomcat无法启动,页面报错404。

查看日志,内容如下:

31-Aug-2018 09:47:43.139 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
31-Aug-2018 09:47:43.140 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
31-Aug-2018 09:47:43.141 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@4f752dd7')
31-Aug-2018 09:47:47.637 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.apache.solr.handler.dataimport.scheduler.ApplicationListener]
 java.lang.NoSuchMethodError: org.apache.solr.core.SolrResourceLoader.<init>(Ljava/lang/String;)V
    at org.apache.solr.handler.dataimport.scheduler.SolrDataImportProperties.loadProperties(SolrDataImportProperties.java:36)
    at org.apache.solr.handler.dataimport.scheduler.BaseTimerTask.reloadParams(BaseTimerTask.java:57)
    at org.apache.solr.handler.dataimport.scheduler.BaseTimerTask.<init>(BaseTimerTask.java:39)
    at org.apache.solr.handler.dataimport.scheduler.DeltaImportHTTPPostScheduler.<init>(DeltaImportHTTPPostScheduler.java:20)
    at org.apache.solr.handler.dataimport.scheduler.ApplicationListener.contextInitialized(ApplicationListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4792)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5256)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1140)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

经过重重困难,终于找到了解决方案,问题原因是 引入的apache-solr-dataimportscheduler-1.0.jar或者1.1 这个jar包针对高版本solr 有并未及时维护。也就是版本没有跟上所以产生bug。

有大神已经解决了该问题,且针对该jar反编译且重新打包了。

solr-dataimport-scheduler.jar

下载地址:https://download.csdn.net/download/vikasdhanve/10637569

更换这个jar包后,然后该问题迎刃而解。

在处理该问题的时候,在网上的确是碰到了很多人跟我一样的问题,但是始终就没有人给出一个解决方案。

我这儿就借着大神们的砖搬给大家,也算是个人记录一下该问题的处理方法吧。

大家有什么问题可以留言,一起讨论。

目录
相关文章
|
27天前
|
PHP 数据库
fastadmin框架如何查询数据表指定时间段内的数据
fastadmin框架如何查询数据表指定时间段内的数据
21 0
|
1月前
|
数据库
解决logstash同步数据库内容到ES时,同步时间点用到了别的表的最新时间点
解决logstash同步数据库内容到ES时,同步时间点用到了别的表的最新时间点
10 0
|
7月前
白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数
白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数
32 0
|
8月前
|
消息中间件 Arthas 运维
日志瘦身骚操作:从 5G 优化到 1G,牛逼!!
日志瘦身骚操作:从 5G 优化到 1G,牛逼!!
|
11月前
|
Shell 分布式数据库 Hbase
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
133 0
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
|
数据库
从数据库中分批取数据的两种方式
从数据库中分批取数据的两种方式
74 0
|
JSON Shell 开发工具
探究 | Elasticsearch如何物理删除给定期限的历史数据?
1、题记 想到删除,基础认知是delete,细分为删除文档(document)和删除索引;要删除历史数据,基础认知是:删除了给定条件的数据,用delete_by_query。 实际操作发现: - 删除文档后,磁盘空间并没有立即减少,反而增加了? - 除了定时任务+delete_by_query,有没有更好的方式呢?
315 0
|
存储 监控 数据可视化
Elasticsearch索引增量统计及定时邮件实现
0、需求 随着ELKStack在应用系统中的数据规模的急剧增长,每天千万级别数据量(存储大小:10000000*10k/1024/1024=95.37GB,假设单条数据10kB,实际远大于10KB)的累积成为日常需求。 如何以相对简单的图形化效果展示数据的增量呢? 本文给出思路和实现。
192 0
Elasticsearch索引增量统计及定时邮件实现
|
存储 弹性计算 容灾
实战宝典 | 如何让备份数据秒级可用,随时查询历史数据?
盘活二级数据的方案,从解决方案的角度是成立的,但实施起来面临着许多技术困难。CDM是备份技术领域近几年备受关注的技术方向。业界对于CDM的定义各有一些不同,在数据库领域,我们认为CDM是多项技术组合而成的解决方案,目的是帮助用户更快速、低成本的保存和使用数据库备份数据。阿里云数据库备份产品DBS,运用了业界领先的CDM(Copy Data Management)技术,提供了完全克服以上技术困难的整体解决方案——DBS沙箱,帮助用户全面激活从备份数据到二级数据库业务生态。
2263 0
实战宝典 | 如何让备份数据秒级可用,随时查询历史数据?
|
分布式数据库 Hbase 存储
为了实现在线库的复杂查询,你还在双写吗?
本文作者:阿里云数据库NoSQL技术专家陈明(花名:明朔)
1997 0
相关产品
云迁移中心
推荐文章
更多