官方文档:
步骤
public static void main(String[] args) throws IOException {
// 1.创建客户端
RestClientBuilder clientBuilder = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"));
RestHighLevelClient client = new RestHighLevelClient(clientBuilder);
// 2.创建请求,指定文档的索引名称和id
UpdateRequest request = new UpdateRequest("posts", "1");
// 3.要更新的文档
String jsonString = "{" +
"\"updated\":\"2017-01-01\"," +
"\"reason\":\"daily update\"" +
"}";
// 文档也可以以Map对象的形式提交,具体请参考 API
request.doc(jsonString, XContentType.JSON);
// 4.执行请求,返回响应
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
String id = response.getId();
String index = response.getIndex();
GetResult getResult = response.getGetResult();
boolean exists = getResult.isExists();//文档是否存在
// 5.关闭客户端
client.close();
}
上面更新文档的方式被称为提供部分文档的更新,ES客户端还支持一种脚本方式的更新
脚本方式
public static void main(String[] args) throws IOException {
// 1.创建客户端
RestClientBuilder clientBuilder = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"));
RestHighLevelClient client = new RestHighLevelClient(clientBuilder);
// 2.创建请求,指定文档的索引名称和id
UpdateRequest request = new UpdateRequest("posts", "1");
// 3.要更新的文档
// 脚本执行时的参数
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("count", 4);
// 创建脚本
Script inline = new Script(ScriptType.INLINE, "painless",
"ctx._source.field += params.count", parameters);
request.script(inline);
// 4.执行请求,返回响应
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
String id = response.getId();
String index = response.getIndex();
GetResult getResult = response.getGetResult();
boolean exists = getResult.isExists();//文档是否存在
// 5.关闭客户端
client.close();
}