後臺管理系統中,當進行部分修改操做後,會當即跳轉列表頁面,此時列表展現的仍爲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");
複製代碼