通过_id读取Elastic文档是否会重置refresh_interval并强制重索引?
问题
Elasticsearch在写入调优章节建议增加Refresh Interval来提升写入效率。我们在文档摄入过程中可能执行如下读取操作:
GET /my-index/_doc/mydocumentid
也就是通过_id读取文档(而非普通搜索操作)。有说明称文档id像其他属性一样被加入Lucene索引,这是否意味着该读取操作仍会重置refresh_interval,强制重新索引,而非等待完整的refresh_interval周期?
答案
不会。通过_id执行的GET读取操作不会触发强制refresh,也不会打乱你设置的refresh_interval周期,具体原因如下:
- Elasticsearch中,基于
_id的文档查询是实时读取,默认情况下直接从内存缓冲区(未刷写到磁盘的待索引数据)或事务日志(translog)中获取最新版本的文档,完全不需要依赖Lucene已刷新到磁盘的索引段。 - 虽然
_id确实会被纳入Lucene索引,但这种主键查找不走全文搜索的查询路径——全文搜索需要扫描已刷新的索引段,而主键查找是直接定位文档的物理存储位置,绕开了需要等待refresh的搜索流程。 - 只有执行搜索类操作(比如
search、match查询等)且指定了refresh=wait_for参数,或者主动修改索引的refresh策略时,才会触发强制refresh或影响refresh_interval的执行逻辑。
内容的提问来源于stack exchange,提问作者Marvin
相关产品推荐
相关产品推荐

