solrsolr的相关操作(addDocument,flush,commit,rollback,optimize,close)解析

在solr中通常包含以下一些操作,包括显式的和隐式的操作

1、addDocument,对文档进行分析,分词处理,创建索引段segment,每当flush缓冲区中增加的文档,索引文件都会新建一个段segment。

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时索引大小的空间。

猜你喜欢

转载自fengbin2005.iteye.com/blog/2381504