solr中commit和opimize理解

来源:互联网 发布:java map value 多值 编辑:程序博客网 时间:2024/06/05 10:11
在solr中通常包含以下一些操作,包括显式的和隐式的操作
1、addDocument,对文档进行分析,分词处理,创建索引段segment,每当flush缓冲区中增加的文档,索引文件都会新建一个段segment。
   添加Document时,没有commit或者optimize操作时,文档无法被索引到!
   commit或optimize操作会更新索引,另optimize是包含commit操作,索引文件越大,commit和optimize就越耗时
   
2、commit,除了向Directory对象提交索引变化,搜索器query的重新建立
commit提交后,索引flush到硬盘上,并触发listener,创造新的insexSearcher(新的insexReader,从硬盘中加载索引),这样后续的查询就用新的insexsearcher了。
在solr4.0之后,有两种commit,一种是hard commit,一种是softcommit;
hardcommit的时候,要flush document到存储上,并且会warm 新的searcher;而softcommit是在NRT实时搜索中提出的,不会flush到持久化存储,也可以使得document被搜索到,代价比hardcommit要小的多;对实时性要求比较高的场景下,可以做softcommit操作,不过还是要定时hardcommit,确保 索引持久化到存储。

3、rollback,回滚对文档的索引的变动
4、flush,当内存中文档的索引的大小大于一定的阀值时,会flush到硬盘上
满足下面两个条件,缓存自动flush到storage上;但是此时并不能搜索到已add但未提交的索引。
    <ramBufferSizeMB>100</ramBufferSizeMB>
     <maxBufferedDocs>1000</maxBufferedDocs>
     Solr4.0以后启用了事务日志updatelog的概念,可以保证不丢失数据;在宕机后,完全可以根据updatelog来进行恢复,自动建立索引,及时索引未来得急flush到磁盘上。
5、close,lucene中对IndexWrite的close操作,隐含进行flush操作,后做commit操作
6、optimize(merge),
有点像硬盘上整理磁盘碎片的操作。为了提高搜索速度,它会将索引重组在一起,然后移除需要被删除或是更新的文档,请注意,solr是没有update的这种操作的,只有增加与删除。solr在优化时,将需要删除或是被替换的索引标记为deleted,然后再创建新的文档替换掉需要被替换的。optimize就是执行此操作。所以在优化的时候,你的索引会增大,然后再减小。optimize操作会创建一个全新的的索引结构,所以,你需要预备出2倍于你commit时索引大小的空间。
0 0
原创粉丝点击