14.refresh操作

本文详细解读了Elasticsearch中refresh操作的不同设置(true、wait_for和false),介绍了如何根据需求选择刷新方式以提高性能和同步可见性。特别关注了设置为true和wait_for的影响,以及何时选择默认的false设置。
摘要由CSDN通过智能技术生成

1. refresh 简介

The Index, Update, Delete, and Bulk APIs 支持refresh操作。控制这些api对应的请求所做的更改对搜索可见。
refresh可以设置的值有

  1. true或者空字符串。
  2. wait_for
  3. false

1. true或者空字符串

在操作发生后立即刷新相关的主要和副本分片(不是整个索引),以便更新的文档立即显示在搜索结果中。只有仔细思考和验证才能设置以免导致性能不佳。

2. wait_for

这个设置为true的话,如果使用refresh的话,当前请求不会主动触发refresh,而是等待系统index.refresh_interval 设置的后台refresh之后才会返回请求。

Wait for the changes made by the request to be made visible by a refresh before replying. This doesn’t force an immediate refresh, rather, it waits for a refresh to happen. Elasticsearch automatically refreshes shards that have changed every index.refresh_interval which defaults to one second. That setting is dynamic. Calling the Refresh API or setting refresh to true on any of the APIs that support it will also cause a refresh, in turn causing already running requests with refresh=wait_for to return.

3. false (the default)

false也是默认值,不会进行refresh操作

2.如何选择设置

除非你有一个很好的理由等待修改变得可见,不然的话就尽量使用refresh=false,因为这是默认值,URL不传refresh即可。
如果你一定要让所做的修改请求同步可见,那么您必须在对Elasticsearch(true)进行更多的负载与更长的等待响应(wait_for)之间进行选择。这里有几点应该告诉这个决定:

  1. 与设置为true相比,wait_for能让索引做更多的变更工作,在这种情况下,每隔index.refresh_interval索引的修改只才会保存。
  2. true将构造较小的有效的索引(微小段),以后必须将其合并到更有效的索引构造(较大的段)中。这意味着设置为true时,索引将花费时间在创建微小段上面,在搜索时从微小段进行搜索,并在合并时来制作较大段。
  3. 不要在一行中启动多个refresh=wait_for请求。而是通过一个Bulk请求来使用refresh=wait_for,Elasticsearch将并行执行它们,并且只有当它们全部完成时才返回。
  4. 如果刷新间隔设置为-1,则禁用了自动刷新,则refresh=wait_for的请求将无限期地等待,直到某些其它操作导致刷新。相反,将index.refresh_interval设置为小于默认值譬如200ms,refresh=wait_for更快地恢复,但仍会生成低效的段。
  5. refresh=wait_for仅影响其所在的请求,但是,通过强制立即刷新,refresh=true将影响其他正在进行的请求。一般来说,如果你有一个运行的系统,你不想打扰,那么refresh=wait_for是一个较小的修改。

下面的put操作会主动触发refresh,以便于内容在后面的search中立即可见

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

下面的操作并不保证其在后面的search中立即可见

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

下面的请求不会触发refresh,但是会等待别的情况触发refresh之后返回

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值