<query />
在标签<query/>里面可以进行一些优化搜索的配置。在Solr的查询过程中,运用到一个叫searcher的组件,在一个特定的时间只能有一个“active”的searcher。这个active searcher在Lucene索引中有一个只读的映射。当新的document加入到Solr的时候,当前的searcher在搜索结果中是看不到这个新加的document的。那么问题就来了:怎么样才能让新添加的文件出现在搜索结果中?一个解决这个问题的办法就是关闭当前的searcher并对新的索引文件打开一个新的searcher。
在admin界面中,查看collection1的Plugins/Status,点击core:
第一行展示的就是当前的Searcher,当我们重新对文件建立索引,在example的exampledocs下运用:
Java -jar postjar xml:
刷新界面:
可以看到Searcher改变了。这是因为postjar提交个commit指令。从上面的示例我们知道commit指令可以创建一个新的searcher,使得可以检索到最新的文件,当新searcher创建的时候要先销毁旧的searcher。这时候如果还有基于旧searcher的查询在进行中,Solr就要等待所有进行中的查询结束。然后,所有基于当前searcher的cached对象都要失效。因为之前建立起来的cache都失效了,所以建立一个新的searcher可能是很耗时的。假设一个用户在返回的结果中进行翻页 *** 作,当用户从第二页翻到第三页的时候一个新的searcher打开了,此时用户就会一直等待第三页的加载,但是这时候之前加载的document都已经失效,所以就会让用户感觉到加载很慢。
对于上述问题,Solr提供了一系列的工具,Solr在建立一个searcher的时候有称为warming的概念,即让新的searcher在后台建立,并让当前的searcher继续工作直到后台的searcher完全warm。
Warming a new searcher
Solr运用这个策略来使得在一段时间内还是返回旧的结果,而避免用户因为新建searcher而降低查询的性能。有两种warming的策略:autowarming new caches from the old caches(从旧的cache中创建新的cache)和execute cache-warming queries(重新执行一些queries来填充新的cache)。
Cache-warming queries是一种preconfigured query来构建新searcher的cache。
上面的配置定义了一系列的queries当newSearcher事件出现的时候就执行(如在commit之后)。
<useColdSearcher/>
如果为false,那么Solr就会阻塞直到warming searcher完成所有的warming queries。
<useColdSearcher>false</useColdSearcher>
如果为true,Solr会马上注册一个warming searcher。
<maxWarmingSearchers>
定义在后台可以同时warming的最大searcher数量。默认值为2
主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录;使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引。
一、增量索引之删除
昨天已经说过,增量索引其实就是SOLR对上次做过(增量或者全量)索引之后到这次做索引之间的这段时间数据库发生变化的数据进行创建索引,昨天我们说了增加一条数据或者修改一条数据之后创建增量索引,现在来说删除数据的增量索引。
其实这里所说的删除是假删除,什么意思呢?就是并不是说在数据库中把某些数据给彻底删除掉,而是说给你不想创建索引的数据一个标识符,然后告诉
solr,有这个标识符的数据你就不要给我创建索引了,我不需要,然后solr创建索引的时候就会忽视这些有特殊标识符的数据,大概的原理就是这样的,那
么怎么实现的呢?下面来看:
11数据库新增字段
昨天做新增的增量索引的时候需要在数据库添加一个字段,今天做删除的,还是需要一个字段,然后用这个字段来标示数据是否需要创建索引,字段如下所示:
字段名称大家可以自己看着定,类型给个int就行,至于长度也随意,我的是0表示需要创建索引的数据,1表示不需要创建索引的数据,也就是我所说的假删除的数据。
12修改配置文件
同样,需要将该字段配置到data-configxml和schemaxml文件中,如下所示:
data-configxml
注意圈起来的三个地方,首先肯定是需要把isdelete字段变成一个file标签,其次,需要query语句需要添加上where条件,查询出数据库中所有的需要创建索引的数据,然后再添加一个deletedPKQuery语
句,这条语句和deltaQuery与deltaImportQuery语句一样,都是只有在做增量索引的时候起作用,deletedPKQuery是查
询出所有假删除的数据的ID,然后由deltaImportQuery查询出这些ID对应的记录的全部数据,然后在已经创建的索引中删除掉这一部分索引。
schemaxml
schemaxml文件中倒是没有什么大的变化,只需要把isdelete字段添加进来即可:
13查看效果
按照上面的配置即可,然后我们来看一下效果,首先是数据库:
还是昨天的17条数据。
SOLR已经创建好的索引:
索引也是17条,和数据库的数据是对应的,下面我把数据库中的其中两条数据的isdelet字段修改成1,然后创建一个增量索引,方法和昨天一样,我就不再截图了,首先还是修改数据库:
把发哥跟梁朝伟的isdelete修改成1,执行增量索引后的结果如下:
可以看到此时的索引少了2条,那到底少的是不是我变成1的两个人呢?我们可以查找一下,找不到的话就对了:
可以看到此时查找周润发,但是只找到了星爷,这个原因还是分词器的问题,昨天已经说过了,下面再查一下梁朝伟:
可以看到查找结果是空的。
通过上面的两条查询,说明我们对假删除所做的增量索引时成功的。
二、定时增量索引
如果每次数据库变化两条数据我们就得到>
以上就是关于solr3.5中如何用java代码为PDF,Office等文件添加索引全部的内容,包括:solr3.5中如何用java代码为PDF,Office等文件添加索引、如何用Solr搭建大数据查询平台、Solr基本配置(三)——Searcher等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)