《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.20.Refresh/flush(中) https://developer.aliyun.com/article/1229331
Refresh API
刷新一个或多个索引,触发API 刷新文档对应的索引。
POST /my-index-000001/_refresh POST <target>/_refresh GET <target>/_refresh POST /_refresh GET /_refresh
使用刷新 API 显式刷新一个或多个索引。如果请求以数据流为目标,它会刷新流的支持索引。一刷新,使因为可用于搜索上次刷新的索引执行的所有操作。
默认情况下,Elasticsearch 每秒都会定期刷新索引,但仅限于在过去 30 秒内收到一个或多个搜索请求的索引。你可以使用index.refresh_interval设置更改此默认间隔。
刷新请求是同步的,在刷新操作完成之前不会返回响应。
刷新是资源密集型的。为了确保良好的集群性能,我们建议尽可能等待 Elasticsearch 的定期刷新,而不是执行显式刷新。
如果你的应用程序工作流索引文档,然后运行搜索以检索索引文档,我们建议使用索引 API 的refresh=wait_for 查询参数选项。此选项可确保索引操作在运行搜索之前等待定期刷新。
例子
刷新多个数据流和索引:
POST /my-index-000001,my-index-000002/_refresh
刷新集群中的所有数据流和索引:
POST /_refresh
Flush API
Flush 一个或多个数据流:
POST /my-index-000001/_flush POST /<target>/_flush GET /<target>/_flush POST /_flush GET /_flush
刷新数据流或索引是确保当前仅存储在事务日志中的任何数据也永久存储在 Lucene 索引中的过程。重新启动时,Elasticsearch 会将所有未刷新的操作从事务日志中重放到 Lucene 索引中,以将其恢复到重新启动前的状态。Elasticsearch 会根据需要自动触发刷新,使用启发式方法在未刷新的事务日志的大小与执行每次刷新的成本之间进行权衡。
一旦每个操作被刷新,它就会永久存储在 Lucene 索引中。这可能意味着不需要在事务日志中维护它的额外副本,除非它因某些其他原因被保留。事务日志由多个文件组成,称为generation,一旦不再需要,Elasticsearch 将删除任何生成文件,从而释放磁盘空间。
也可以使用刷新 API 触发对一个或多个索引的刷新,尽管用户很少需要直接调用此 API。如果你在索引某些文档后调用刷新 API,则成功响应表明 Elasticsearch 已刷新在调用刷新 API 之前已编制索引的所有文档。
例子
刷新特定的数据流或索引:
POST /my-index-000001/_flush
刷新多个数据流和索引:
POST /my-index-000001,my-index-000002/_flush
刷新集群中的所有数据流和索引:
POST /_flush
结论
在本文档中,我们探索了两个紧密相关的 Elasticsearch 操作,_flush 和 _refresh 显示了它们之间的共性和差异。 我们还介绍了 Lucene 的基础架构组件-重新打开(reopen) 并提交
(commits) - 这有助于掌握 Elasticsearch中 _refresh 和 _flush 操作的要点。我们同时探讨了 _refresh 和 _flush 背后发生的时间的异同。
本文部分内容参考自CSDN——Elastic 中国社区官方博客