近实时搜索原理
本章定位:Elasticsearch 是"近实时"(Near Real-Time,NRT)搜索引擎——文档写入后并不能立即被搜索到,但延迟通常只有 1 秒。这个"1 秒延迟"来自 Refresh 机制。
定义与作用
近实时搜索(NRT)指文档写入后,约 1 秒后可被搜索到。这 1 秒来自默认的 refresh_interval: 1s——ES 每 1 秒将内存 Buffer 中的文档刷成新的 Lucene Segment(可搜索但未持久化)。
核心原理:写入三阶段
完整示例:手动控制 Refresh
# 关闭自动 Refresh(导入场景)
PUT /students_bulk/_settings
{ "index": { "refresh_interval": "-1" } }
# 导入完成后手动 Refresh
POST /students_bulk/_refresh
# 恢复自动 Refresh
PUT /students_bulk/_settings
{ "index": { "refresh_interval": "1s" } }
小结
Refresh 是"内存→Segment"的过程,使文档可搜索。代价是频繁创建 Segment(I/O 开销)。批量导入时关闭 Refresh 可提升 10 倍+ 写入性能。