SolrCloud索引数量少于正确值,并设置自动提提交;Solr的几种提交方式;

场景描述:

        在创建SolrCloud的索引时,发现数据量变少了。多次测试发现,每次创建索引都会少一部分,在运行其他创建索引程序时,之前的索引量会达到正确索引量,但是后面的又会少一部分。问题出在MapReduce程序中,有一次提交没有执行。

先了解下提交的几种方式:

  • 硬提交(hard commit): solrService.commit(true,true,true)

        硬提交是提交数据持久化到磁盘里面。

openSearcher=true:Solr/Lucene searchers 被重新打开,所有的cache都失效(索引段级别的cache不会失效),autowarming会执行。这是老版本文档唯一能看到新增加的文档的方法。 

openSearcher=false:如果要搜索新的文档,需要执行一次soft commit。

  • 软提交(Soft commit): solrService.commit()

        软提交是提交数据到内存里面,并没有持久化到磁盘。

        它能使文档可见,但是会有一些代价。尤其是在solrconfig.xml里定义的顶层的cache(filterCache、queryResultCache等)会失效,autowarning会在顶层cache发生(比如filterCache、queryResultCache)。这时候,newSearcher的查询都会被执行,而且,fieldvaluecache也会失效。因此,facet查询也不得不等cache重新生成。在频繁的soft commit下,cache基本上没什么效果,在某些场景下,最好去掉它。然而,索引段级别的cache(比如fieldcache),用于function 查询,排序等,是基于索引段的,不会因为soft commit而失效,它们能继续被使用。

  • 自动提交
        设置hard commit时间间隔为15秒,openSearcher=false。只是为了把大量数据导入solr,而不是为了实时搜索。这样设置,就是最坏的情况也只是当你重启,只需要从tlog回放15秒的数据。

        设置soft commit时间间隔足够长,比如5分钟或更长(配置为-1则不自动soft commit)。soft commit是有关可见性的,大批量索引构建应该不是为了满足实时搜索的,所以没必要额外地打开任何类型的searcher。这里设置的是5分钟。项目中使用的是自动提交,则程序中不需要手动设置提交命令,服务器会自动提交。

自动提交设置如下:


总结:

1.硬提交:
硬提交是提交数据持久化到磁盘里面。
若想搜到结果openSearcher为true即可,openSearcher为false时,需要执行Soft commit

2.软提交:
软提交是提交数据到内存里面,并没有持久化到磁盘。
是比硬提交(openSearcher=true)使文档可见的更轻量级的操作

3.自动提交
则程序中不需要手动设置提交命令,服务器会自动提交。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值