solr 增量索引 怎么没执行

 我来答
就烦条0o
2016-07-28 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
一、增量索引之删除

  昨天已经说过,增量索引其实就是SOLR对上次做过(增量或者全量)索引之后到这次做索引之间的这段时间数据库发生变化的数据进行创建索引,昨天我们说了增加一条数据或者修改一条数据之后创建增量索引,现在来说删除数据的增量索引。

  其实这里所说的删除是假删除,什么意思呢?就是并不是说在数据库中把某些数据给彻底删除掉,而是说给你不想创建索引的数据一个标识符,然后告诉
solr,有这个标识符的数据你就不要给我创建索引了,我不需要,然后solr创建索引的时候就会忽视这些有特殊标识符的数据,大概的原理就是这样的,那
么怎么实现的呢?下面来看:

  1.1数据库新增字段

  昨天做新增的增量索引的时候需要在数据库添加一个字段,今天做删除的,还是需要一个字段,然后用这个字段来标示数据是否需要创建索引,字段如下所示:

  

  字段名称大家可以自己看着定,类型给个int就行,至于长度也随意,我的是0表示需要创建索引的数据,1表示不需要创建索引的数据,也就是我所说的假删除的数据。

  1.2修改配置文件

  同样,需要将该字段配置到data-config.xml和schema.xml文件中,如下所示:

  data-config.xml

  

  注意圈起来的三个地方,首先肯定是需要把isdelete字段变成一个file标签,其次,需要query语句需要添加上where条件,查询出数据库中所有的需要创建索引的数据,然后再添加一个deletedPKQuery语
句,这条语句和deltaQuery与deltaImportQuery语句一样,都是只有在做增量索引的时候起作用,deletedPKQuery是查
询出所有假删除的数据的ID,然后由deltaImportQuery查询出这些ID对应的记录的全部数据,然后在已经创建的索引中删除掉这一部分索引。

  schema.xml

  schema.xml文件中倒是没有什么大的变化,只需要把isdelete字段添加进来即可:

  

1.3查看效果

按照上面的配置即可,然后我们来看一下效果,首先是数据库:

还是昨天的17条数据。

SOLR已经创建好的索引:

索引也是17条,和数据库的数据是对应的,下面我把数据库中的其中两条数据的isdelet字段修改成1,然后创建一个增量索引,方法和昨天一样,我就不再截图了,首先还是修改数据库:

把发哥跟梁朝伟的isdelete修改成1,执行增量索引后的结果如下:

可以看到此时的索引少了2条,那到底少的是不是我变成1的两个人呢?我们可以查找一下,找不到的话就对了:

可以看到此时查找周润发,但是只找到了星爷,这个原因还是分词器的问题,昨天已经说过了,下面再查一下梁朝伟:

可以看到查找结果是空的。

  通过上面的两条查询,说明我们对假删除所做的增量索引时成功的。

二、定时增量索引

  如果每次数据库变化两条数据我们就得到http://localhost:8080/solr这里做一次增量索引,那不是很麻烦吗?所以SOLR提供了定时任务的功能,当然你也可以自己集成,比如用sPRing的定时任务,或者集成Quartz这些,定时执行一下增量索引的URL,也是可以达到相同的目的的,但是我们今天说的并不是这个,下面开始详细说。

  首先,需要引入一个JAR包,这个JAR包我已经发在了第一篇文章最后的DEMO里面了,解压之后就可以看到,但是我要说一点的是,我发出的JAR包是修改过源码的JAR包,很多地方给出的JAR包是apache-solr-dataimportscheduler-1.0.jar这
个JAR包,下载地址是http://code.google.com/p/solr-dataimport-scheduler/downloads
/list,但是这个jar包放入tomcat下的solr项目的lib包后会出错,其实也不是出错,而是出现下面的问题:

http请求一直返回415,提示不支持的媒体类型,
这个问题上周六折腾了我一天的时间,快被郁闷死了,后来在网上查资料的时候看到了别人的一篇文章,也才得以解决,一会儿我会把那个文章地址也发出来,这是
什么原因呢?原因就是这个jar包中的一个类在发送http请求时使用的是post方式,但是我们这里发送的请求却是get方式,所以才一直415,很蛋
疼有没有,所以需要进入jar包,修改源码之后才能正常工作,我看的那篇文章地址是:http://blog.csdn.net/zwx19921215
/article/details/43152307,里面讲的很详细,还有另外的一个问题,大家可以看一下,好了,把这个jar包引入solr的lib
包之后进行下一步。

  第二步就是在solr的web.xml文件中添加如下代码:

  

  第三步,解压apache-solr-dataimportscheduler-1.0.jar文件,从解压出来的文件夹中找出dataimport.properties文件,然后复制该文件到你的SOLR_HOME目录下的conf文件夹中,

注意,这个conf文件夹并不是SOLR_HOME\collection1下的conf,而是SOLR_HOME\conf文件夹,以前是不存在的,需要你自己创建。 、

  第四步,打开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
syncCores=collection1

# 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&wt=json&optimize=false

# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1

# 重做索引的时间间隔,单位分钟,默认7200,即1天;
# 为空,为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

  注意:

    1.syncCores=collection1表示对collection1这个core定时创建索引,如果不设置的话,默认也是对collection1创建索引,如果用到了multicore,那么使用逗号隔开即可。

    2.server=localhost,port=8080改成你自己的容器地址和端口号即可;

    3.interval=1表示定时增量索引的时间间隔,单位是分钟;

    4.其他的按照上面的注释配置即可,也没什么难理解的;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式