首页 > 其他 > 详细

solr的soft commit和hard commit

时间:2020-11-09 14:34:04      阅读:42      评论:0      收藏:0      [点我收藏+]

参考代码:
DirectUpdateHandler2. addDoc0()
SolrConfig.loadUpdatehandlerInfo()

以下是结论:
1. Soft commit是保存在cache中,而hard commit是保存到磁盘的索引文件中;(此处有保留,softcommit后且未hardcommit,shutdown,再start,solr中的索引未丢失,所以softcommit是否也保存到了某处?)
2. Soft commit一定能搜到,但不一定保存到磁盘,hard commit不一定能搜到,但是一定保存到磁盘。
3. Index一个doc,没有指定是不是commit,默认是soft commit。
这是看solrconfig.xml中的配置项updateHandler,它有个子配置项为commitWithin/softCommit,默认是没有配置的,默认值是true。

<commitWithin>
	<softCommit>true</softCommit>
</commitWithin>

4. 如果index一个doc时,传入了参数commitWithin(多少ms后commit),那么如果在soft commit下,就是在多少ms后soft commit,如果是hard commit就是在多少ms后hard commit。
若此参数为-1,或者没有传入(没传入的默认值就是-1),那就是不commit,只能等待auto commit。
5. auto soft commit和auto hard commit都是有的,看配置项updateHandler/autoCommit和updateHandler/autoSoftCommit。若是maxDocs和maxTime都是-1,那代表都不auto commit了。
6. 在solrconfig.xml中的配置项updateHandler中,还有个子配置项为autoCommit/openSearcher,默认是false。

<autoCommit>
	<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
	<openSearcher>false</openSearcher>
</autoCommit>

这个项很有意思,它仅存在在auto hard commit的配置(autoCommit是auto hard commit, autoSoftCommit是auto soft commit)中,它的意思是在hard commit后,是不是使得新的索引被search可见。
auto soft commit是没有这一项,因为它一旦commit,一定是search可见的(可以搜索到)。
但是auto hard commit中,如果这一项为false,且updateHandler/commitWithin/softCommit为false(表示当前是hard commit),那么你提交一个doc,不管配置commit=true还是commitWithin=1000,又或者已经达到了auto hard commit的时间,等到hard commit结束后,你依然无法搜索到这个文档。永远!(当然你reload整个collection是可以的)
7. 给第6条总结一下:如果是soft commit了,一定能搜索到,如果是hard commit+ openSearcher为true了,也一定能搜索到。
8. 结论是:最好同时配置updateHandler/autoCommit和updateHandler/autoSoftCommit,不要配置updateHandler/commitWithin/softCommit。如果是按照maxTime来 配置,那updateHandler/autoCommit/maxTime要长,比如24小时,updateHandler/autoSoftCommit/maxTime要短,比如1分钟,updateHandler/autoCommit/openSearcher配置为false(就是hard commit仅用来更新索引文件,不影响search)。
9. 默认的配置项是这样的:

<updateHandler class="solr.DirectUpdateHandler2">
	<updateLog>
		<str name="dir">${solr.ulog.dir:}</str>
		<int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
	</updateLog>
	<autoCommit>
		<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
		<openSearcher>false</openSearcher>
	</autoCommit>
	<autoSoftCommit>
		<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
	</autoSoftCommit>
</updateHandler>

解读一下:index时使用soft commit,如果index时没有commit,那么永远不会soft commit,过15s后hard commit,但是搜索不到,除非你reload collection。
commit的线程名是commitScheduler**

solr的soft commit和hard commit

原文:https://www.cnblogs.com/sheshouxy/p/13947643.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!