Lucene 创建索引
Lucene 创建索引
Segment
Lucene 将索引数据存储在 segment 中,segment 一旦写入磁盘,就不可再变:不可修改、不会删除。删除仅仅是逻辑删除,并不会物理删除;修改则是逻辑删除+写入新 segment。
写入链路

当有新索引需要写入,需要如下步骤:
- 写入索引缓冲区(index buffer),同时记录 translog,即事务日志,用于崩溃恢复;
- Refresh:每隔 1s 将 buffer 中的 doc 刷新到 filesystem cache 中成为新的 segment,此时文档就可以被检索到了。 但还没有持久化到磁盘中。
- 间隔时间 refresh_interval 可以在 setting 中自定义,我们之前业务设定为 10s,意味着增量数据写入后大约 10s 可以被检索到,es 提供近实时搜索,属于业务可接受范围。
- Flush:每当 30 分钟(默认) ,或者 filesystem cache 积累到一定程度、或者 translog 过大时,filesystem cache 会 flush 到磁盘中:
- 执行一次 refresh,清空 buffer;
- 调用 fsync 将 filesystem cache 中的 segment 持久化到磁盘;
- 清空 translog。
- merge:refresh 每次会产生一个新的 segment,segment 会越来越多,后台线程定期会将小 segment 合并成大的 segment
Refenrece
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
