在 Elasticsearch 中,Refresh 和 Flush 是两个非常关键但容易混淆的概念。简单来说,它们的区别在于: Refresh(刷新): 解决的是数据 “可见性” 问题(让数据可以被搜索到)。 Flush(冲刷): 解决的是数据 “持久化” 问题(将数据真正写入磁盘,防止丢失)。 为了深入理解,我们需要了解 Elasticsearch(基于 Lucene)写入数据的流程。 --- 1. 核心流程图解 当一个文档被写入 ES 时,流程如下: 1. 写入 Buffer & Translog: 数据首先被写入内存缓冲区(Memory Buffer),同时追加到事务日志(Translog)中(为了防止断电数据丢失)。 2. Refresh(变为可搜索): 默认每 1 秒,ES 会将 Memory Buffer 中的数据生成一个新的 Lucene Segment,并放入 文件系统缓存(Filesystem Cache) 中。 此时:数据可以被搜索到了,但还在内存中,没有真正落盘。 3. Flush(变为持久化): 当 Translog 达到一定大小或时间(默认 30 分钟)...