segment
segment即是倒排索引,
特点是只能 合并或者删除,不能修改
每一次refresh会产生一次 segment, 然后合并存储。
每个搜索请求需要访问所有segment,
参数 说明
index.merge.policy.floor_segment 默认2MB,小于该值的segment优先被合并
index.merge.policy.max_merge_at_once 默认10,一次最多合并多少segment
index.merge.policy.max_merged_segment 默认5GB,超过该值的segment不合并
index.merge.policy.max_merge_at_once_explicit 显式调用一次最多合并多少个segment
refresh: 将document转换为segment的过程,在ES中数据会从index-buffer到filesystem-cache的过程。
倒排索引主要分两个部分
单词词典
倒排文件
es写入工作流程
先写入内存 buffer,在 buffer 里的时候数据是搜索不到的;同时将数据写入 translog 日志文件。
如果 buffer 快满了,或者到一定时间,就会将内存 buffer 数据 refresh 到一个新的 segment file 中
但是此时数据不是直接进入 segment file 磁盘文件,而是先进入 os cache 。这个过程就是 refresh。
每隔 1 秒钟,es 将 buffer 中的数据写入一个新的 segment file,每秒钟会产生一个新的磁盘文件 segment file
这个 segment file 中就存储最近 1 秒内 buffer 中写入的数据。
但是如果 buffer 里面此时没有数据,那当然不会执行 refresh 操作
如果 buffer 里面有数据,默认 1 秒钟执行一次 refresh 操作,刷入一个新的 segment file 中。
操作系统里面,磁盘文件其实都有一个东西,叫