赞
踩
在Spring中使用ES的客户端更新数据的时候,会出现数据不会立即生效问题。
ES的客户端是异步请求,并不会等待ES所有节点数据更新完毕再响应请求。
通过在客户端设置数据更新刷新策略为WAIT_UNTIL
,即等待ES完成对数据对更新再响应客户端即可。
设置Maven依赖:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.9.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.9.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.9.1</version>
</dependency>
在Spring中配置ES客户端:
@Bean
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
}
public static void addData(JSONObject json, String index, String type, String id) {
try {
UpdateRequest request = new UpdateRequest(index, type, id);
request.doc(json);
request.docAsUpsert(true);
// 修改刷新策略为等待刷新完成,再结束请求
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
rClient.update(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("写入或更新ES异常:", e);
throw new HandleException(String.format("写入或更新ES异常:%s", e.getMessage()));
}
}
IMMEDIATE
:更新请求发送后,告诉es强制刷新NONE
:更新请求发送后,告诉es不用刷新WAIT_UNTIL
:更新请求发送后,等待es中更新的数据可用后再响应客户端(同步)Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。