RefreshPolicy (刷新策略
es分片默認(rèn)刷新頻率為1s
刷新頻率越高越耗資源(刷新即寫入硬盤,并會產(chǎn)生記錄)其做,詳細(xì)參考es的refresh過程
{
"settings": {},
"defaults": {
"index": {
"refresh_interval": "1s"
}
}
}
為保證數(shù)據(jù)實(shí)時性治筒,es提供手動刷新方法,以Java為例
org.elasticsearch.action.support.WriteRequest.RefreshPolicy
/**
* 默認(rèn)旨枯,不刷新
* 不消耗資源
* 連續(xù)操作容易導(dǎo)致數(shù)據(jù)不同步
*/
NONE("false"),
/**
* 強(qiáng)制刷新,立即刷新數(shù)據(jù)混驰,刷新成功后結(jié)束
* 保證最終數(shù)據(jù)同步
* 耗資源
*/
IMMEDIATE("true"),
/**
* 延遲刷新數(shù)據(jù)攀隔,刷新成功后結(jié)束
* 保證最終數(shù)據(jù)同步
* 耗時(根據(jù)refresh_interval配置決定等待時間
*/
WAIT_UNTIL("wait_for");
在請求結(jié)束后對我們寫入的索引調(diào)用刷新
Java操作es刷新案例
//### Rest方式
@Autowired
public ElasticsearchRestTemplate elasticsearchRestTemplate;
BulkOptions.BulkOptionsBuilder builder = BulkOptions.builder();
//設(shè)置刷新策略
builder.withRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
//1、批量更新
elasticsearchRestTemplate.bulkUpdate(updateQueries, builder.build(),IndexCoordinates.of("索引名稱"));
//2栖榨、單條更新
elasticsearchRestTemplate.update(updateQueries, builder.build(),IndexCoordinates.of("索引名稱"));
//3昆汹、通過調(diào)整更新參數(shù)配置刷新
//此方式不適用于bulk操作 (RefreshPolicy is not supported on an item request. Set it on the BulkRequest instead.;
UpdateQuery updateQuery = builder.withRefresh(UpdateQuery.Refresh.True).withDocument(document).build();
//### Client原生方式
@Autowired
private RestHighLevelClient client;
UpdateByQueryRequest request = new UpdateByQueryRequest("索引名稱");
//在請求結(jié)束后對我們寫入的索引調(diào)用刷新
request.setRefresh(true);
client.updateByQueryAsync(request, RequestOptions.DEFAULT,listener);
Es語法
PUT /test/_doc/2?refresh=true
{"test": "test"}