后台管理系统中,当进行部分修改操做后,会当即跳转列表页面,此时列表展现的仍为es的旧数据。修改的es的数据没有当即展现,可是当再次刷新页面后,数据才为最新的数据。java
众所周知,es不是一个实时的搜索引擎,当数据从写入到可见之间有1秒的间隔时间。所以,在此时间间隔内的查询操做,都是否是最新的数据。bash
在java high level client中,为index
、insert
、update
、bulk
提供了setRefreshPolicy
方法,用于设置数据更改后的刷新策略。性能
主要是三个参数IMMEDIATE
、NONE
、WAIT_UNTIL
:this
NONE:搜索引擎
Don’t refresh after this request. The default.
这是默认的一种方式,调用request修改之后,并不进行强制刷新,刷新的时间间隔为refresh_interval设置的参数。
复制代码
// 1.
request.setRefreshPolicy(WriteRequest.RefreshPolicy.NONE);
// 2.
request.setRefreshPolicy("false");
复制代码
IMMEDIATE:spa
强制刷新相关的主分片和副分片(而不是整个索引),使更新的分片状态变为可搜索。
在使用以前,必定要仔细考虑使用该参数会不会致使性能不佳。
强制刷新做为请求的一部分,这种方式并不适用于索引和查询高吞吐量的场景,
可是做为流量小时提供一致性的视图的确是很使用的。
复制代码
// 1.
request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
// 2.
request.setRefreshPolicy("true");
复制代码
WAIT_UNTIL:code
在返回请求结果以前,会等待刷新请求所作的更改。并非强制当即刷新,而是等待刷新发生
。Elasticsearch会自动刷新已更改每一个index.refresh_interval的分片,默认为一秒。该设置是动态的。
请求持续为打开状态,直到修改的内容变为可搜索为止。此刷新策略与高索引和搜索吞吐量兼容,但它会致使请求等待回复,直到刷新发生
复制代码
设置方式有如下两种。
// 1.
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
// 2.
request.setRefreshPolicy("wait_for");
复制代码