Elasticsearch 实现近实时(Near Real-Time, NRT)搜索的核心在于它如何处理数据的写入、索引和存储。简单来说,ES 牺牲了部分数据写入硬盘的实时性(持久化),换取了极快的检索速度。 通常,ES 的 NRT 延迟默认为 1 秒。也就是说,文档写入后,大约 1 秒钟就可以被搜索到。 以下是其实现原理的详细步骤和核心机制: 核心流程:从写入到可搜索 1. 写入内存缓冲区 (In-memory Buffer) 和 Translog 当一个文档被索引(写入)时,数据会同时被写入两个地方: 内存缓冲区 (In-memory Buffer):用于收集当前的文档数据,等待生成索引分段(Segment)。此时数据不可被搜索。 事务日志 (Translog):用于防止数据丢失。因为内存是不安全的,如果断电数据会丢失,所以先追加写入 Translog(顺序写磁盘,速度快)。 2. Refresh 操作(NRT 的关键) 这是实现“近实时”最关键的一步。 机制:默认每隔 1 秒(),ES 会执行一次 Refresh 操作。 过程: 1. 将内存缓冲区中的文档生成一个新的 Lu...