Elasticsearch bulk索引时refresh_interval为1s已索引记录是否对同批次剩余记录可见
Elasticsearch bulk 请求内部已完成索引记录可见性问题解答
结论
本次bulk请求中已完成索引的400条记录,对同请求内尚未完成索引的剩余记录完全不可见。
核心原因
- 首先,ES的单个bulk请求处理遵循快照隔离逻辑:请求启动时会获取当前索引的一致性快照,整个bulk请求内的所有操作都基于这个快照执行,同请求内其他操作产生的变更不会进入该快照,天然避免脏读。
- 其次,你配置的
refresh_interval: 1s是ES后台的自动周期性刷新规则,该刷新操作只会在当前没有正在处理的写入请求时才会触发,不会打断正在执行的bulk请求。哪怕这400条记录已经写入内存缓冲区,没有完成refresh操作生成可查询的段文件前,也无法被任何搜索请求读取。 - 额外补充:除非你在bulk请求参数中显式指定了
refresh参数,否则所有本次bulk产生的索引变更,只会在整个bulk请求处理完成后的下一次refresh触发后,才会对外可见。
内容的提问来源于stack exchange,提问作者Deepti
相关产品推荐
相关产品推荐

