资讯专栏INFORMATION COLUMN

Elasticsearch 参考指南(?refresh)

luck / 3256人阅读

摘要:在应答之前,等待请求所做的更改被刷新可见,这并不是强制立即刷新,而是等待刷新发生。调用或在任何支持它的上将设置为也会导致刷新,从而导致已经运行的带有的请求返回。默认不执行刷新相关操作,此请求所做的更改将在请求返回后的某个时刻变得可见。

?refresh

索引、更新、删除和批量API支持设置refresh,以控制何时由此请求做出的更改对搜索可见,这些是允许的值:

空字符串或true

在操作发生后立即刷新相关的主碎片和副本碎片(不是整个索引),以便更新后的文档立即出现在搜索结果中,只有经过仔细考虑和核实,从索引和搜索的角度来看,它不会导致性能低下之后,才能这样做。

wait_for

在应答之前,等待请求所做的更改被刷新可见,这并不是强制立即刷新,而是等待刷新发生。Elasticsearch会每index.refresh_interval(默认值为1秒)自动刷新已经更改的碎片,这个设置是动态的。调用Refresh API或在任何支持它的API上将refresh设置为true也会导致刷新,从而导致已经运行的带有refresh=wait_for的请求返回。

false(默认)

不执行刷新相关操作,此请求所做的更改将在请求返回后的某个时刻变得可见。

选择使用哪个设置

除非你有充分的理由等待更改变为可见,否则总是使用refresh=false,或者,因为这是默认值,所以将refresh参数排除在URL之外,这是最简单、最快的选择。

如果你必须使请求所做的更改可见与请求同步,那么你必须在对Elasticsearch增加更多负载(true)和等待更长时间的响应(wait_for)之间进行选择,以下几点应该为该决定提供参考:

true相比,对索引进行的更改越多,wait_for节省越多的工作,在每次index.refresh_interval只更改一次索引的情况下,它不会节省任何工作。

true创建的索引结构效率较低(小段),稍后必须合并为更高效的索引结构(大段),这意味着true的代价是在索引时创建小段,在搜索时搜索小段,在合并时制作大段。

不要在一行中启动多个refresh=wait_for请求,相反,将使用refresh=wait_for的请求批量到单个bulk请求中,Elasticsearch将会并行启动它们,只有当它们全部完成时才返回。

如果刷新间隔设置为-1,则禁用自动刷新,那么具有refresh=wait_for的请求将无限期地等待,直到某个操作导致刷新。相反,将index.refresh_interval设置为比默认值更短的值,比如200ms,将使refresh=wait_for返回的速度更快,但仍然会生成效率低下的段。

refresh=wait_for只影响它所在的请求,但是,通过强制立即刷新,refresh=true将影响其他正在进行的请求,通常,如果你有一个正在运行的系统,你不希望打扰它,那么refresh=wait_for是一个较小的修改。

refresh=wait_for可以强制刷新

如果已经有index.max_refresh_listener(默认为1000)请求等待刷新的情况下在那个碎片上出现refresh=wait_for请求,那么该请求的行为就好像它已经将refresh设置为true一样:它将强制刷新。这保证了当refresh=wait_for请求返回时,它的更改对于搜索是可见的,同时防止对被阻塞的请求使用未检查的资源,如果一个请求因为耗尽了监听器插槽而强制刷新,那么它的响应将包含"forced_refresh": true

Bulk请求在每个碎片上只占用一个插槽,不管它们修改碎片多少次。

样例

这将创建一个文档,并立即刷新索引,使其可见:

PUT /test/_doc/1?refresh
{"test": "test"}
PUT /test/_doc/2?refresh=true
{"test": "test"}

这将创建一个文档,而不需要做任何事情使其对于搜索可见:

PUT /test/_doc/3
{"test": "test"}
PUT /test/_doc/4?refresh=false
{"test": "test"}

这将创建一个文档,并等待它对于搜索成为可见:

PUT /test/_doc/4?refresh=wait_for
{"test": "test"}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34342.html

相关文章

  • Elasticsearch 参考指南(清除缓存)

    摘要:默认情况下,将清除所有缓存,可以通过设置,或来明确清除特定的缓存。多索引清除缓存可以通过单个调用应用于多个索引,甚至可以应用于索引。 清除缓存 清除缓存API允许清除与一个或多个索引关联的所有缓存或特定缓存。 POST /twitter/_cache/clear 默认情况下,API将清除所有缓存,可以通过设置query,fielddata或request来明确清除特定的缓存。 还可以通...

    raledong 评论0 收藏0
  • Elasticsearch 参考指南(升级前重新索引)

    摘要:要升级包含在中创建的索引的集群,必须在升级到之前重新索引或删除它们。将和重置为旧索引中使用的值。等待索引状态变为。在单个更新别名请求中删除旧索引。当重新索引作业完成时,将和设置为所需的值默认设置是和。 升级前重新索引 Elasticsearch可以读取上一个主要版本中创建的索引,旧的索引必须重新索引或删除。Elasticsearch 6.x可以使用Elasticsearch 5.x中创...

    546669204 评论0 收藏0
  • Elasticsearch搜索调优权威指南 (1/3)

    摘要:设置过大的堆内存,换来的是更长的时间这种过多的停顿非常危险,因为可能导致集群误认为该节点网络异常而失联。尽可能使用本地存储,避免使用像或之类的远程或网络文件系统,也要注意像这样的虚拟化存储。 本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/qwkZKLb_ghmlwrqMkqlb7Q 英文原文:https://qbox.io/blog...

    hedge_hog 评论0 收藏0
  • Elasticsearch 参考指南(日期直方图聚合)

    摘要:当使用遵循夏令时更改的时区时,与这些更改发生的时刻接近的桶的大小可能与使用预期的大小略有不同。顺序默认情况下,返回的桶按升序排序,不过可以使用设置控制顺序行为,支持与聚合相同的功能。在中已弃用使用而不是来根据它们的日期键来排序桶。 日期直方图聚合 类似于直方图的多桶聚合,但它只能应用于日期值,由于在Elasticsearch内部将日期表示为long值,因此也可以在日期上使用普通的his...

    CloudDeveloper 评论0 收藏0
  • Elasticsearch 参考指南(Count API)

    摘要:分发计数操作在所有碎片上广播,对于每个碎片组,将选择一个副本并对其执行,这意味着副本增加了计数的可伸缩性。路由可以指定路由值一个逗号分隔的路由值列表,以控制将在哪个碎片上执行计数请求。 Count API count API允许轻松执行查询并获取该查询的匹配数,它可以跨一个或多个索引执行,查询可以使用简单的查询字符串作为参数提供,也可以使用请求体中定义的查询DSL,这里有一个例子: P...

    voyagelab 评论0 收藏0

发表评论

0条评论

luck

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<