?refresh
编辑
该指数,更新,删除和 散装的API支持设置,refresh
当这一要求所做的更改可见搜索控制。这些是允许的值:
空字符串或 true
在操作发生后立即刷新相关的主分片和副本分片(而不是整个索引),以便更新的文档立即显示在搜索结果中。只有在从索引和搜索角度进行仔细考虑并验证它不会导致性能不佳之后,才能进行此操作。
wait_for
在回复之前,请等待刷新请求所做的更改。这不会强制立即刷新,而是等待刷新发生。Elasticsearch会自动刷新每个index.refresh_interval
默认为1秒的分片。那个设置是 动态的。调用Refresh API或设置refresh
为true
支持它的任何API也会导致刷新,从而导致已经运行的请求refresh=wait_for
返回。
false
(默认)
不采取与刷新相关的操作。此请求所做的更改将在请求返回后的某个时间点显示。
选择要使用的设置编辑
除非您有充分的理由等待变更变为可见refresh=false
,否则始终使用,或者,因为这是默认设置,只需将refresh
参数保留在URL之外。这是最简单,最快捷的选择。
如果您绝对必须让请求所做的更改与请求同步可见,那么您必须选择在Elasticsearch(true
)上放置更多负载并等待更长时间的响应(wait_for
)。以下是应该通知该决定的几点:
- 与索引
wait_for
相比,对索引所做的更改越多,工作节省的工作量就越多true
。如果索引每次只更改一次,index.refresh_interval
则不会保存任何工作。 true
创建效率较低的索引构造(小段),这些构造稍后必须合并为更有效的索引构造(更大的段)。意味着成本true
是在索引时创建微小段,在搜索时搜索小段,并在合并时创建更大的段。- 永远不要
refresh=wait_for
连续启动多个请求。而是将它们批量处理为单个批量请求,refresh=wait_for
并且Elasticsearch将并行启动它们并仅在它们全部完成时返回。 - 如果刷新间隔设置为
-1
,禁用自动刷新,则请求refresh=wait_for
将无限期地等待,直到某个操作导致刷新。相反,设置index.refresh_interval
为比默认值更短的内容200ms
会refresh=wait_for
更快回来,但它仍会产生效率低下的段。 refresh=wait_for
仅影响它所处的请求,但是,通过立即强制刷新,refresh=true
将影响其他正在进行的请求。一般情况下,如果您有一个正在运行的系统,您不希望打扰,那么这refresh=wait_for
是一个较小的修改。
refresh=wait_for
可以强制刷新编辑
如果refresh=wait_for
请求在已经 index.max_refresh_listeners
(默认为1000)请求等待该分片上的刷新时进入,那么该请求的行为就像它已经refresh
设置为true
:它将强制刷新。这保证了当refresh=wait_for
请求返回时,其更改对于搜索可见,同时防止对已阻止的请求的未经检查的资源使用。如果请求强制刷新,因为它用完了侦听器插槽,那么它的响应将包含"forced_refresh": true
。
批量请求只会占用他们触摸的每个分片上的一个插槽,无论他们修改分片多少次。
示例编辑
这些将创建一个文档并立即刷新索引,使其可见:
<span style="color:#444444"><span style="color:#333333">PUT / test / _doc / 1?刷新
{“测试一下”}
PUT / test / _doc / 2?refresh = true
{“测试一下”}</span></span>
这些将创建一个文档而不做任何使搜索可见的内容:
<span style="color:#444444"><span style="color:#333333">PUT / test / _doc / 3
{“测试一下”}
PUT / test / _doc / 4?refresh = false
{“测试一下”}</span></span>
这将创建一个文档并等待它对搜索可见:
<span style="color:#444444"><span style="color:#333333">PUT / test / _doc / 4?refresh = wait_for
{“测试一下”}</span></span>
详见文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html