UpdateRequest 更新 es 信息汇总
可以使用 UpdateRequest 更新 es 文档信息。
更新单 id 单属性
// 创建更新请求
UpdateRequest request = new UpdateRequest();
request.index("your_index"); // 设置索引名
request.id("your_id"); // 设置文档ID
// 创建更新的文档
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("updated_field", "new_value"); // 设置需要更新的字段和新值
request.doc(jsonMap); // 设置更新的文档
// 执行更新请求
UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);
更新单 id 嵌套属性
// 创建更新请求
UpdateRequest request = new UpdateRequest();
request.index("your_index"); // 设置索引名
request.id("your_id"); // 设置文档ID
// 创建脚本
Map<String, Object> parameters = new HashMap<>();
parameters.put("key", "your_key");
parameters.put("value", "new_value");
Script inline = new Script(ScriptType.INLINE, "painless",
"def found = false; for (int i = 0; i < ctx._source.properties.length; ++i) {" +
" if (ctx._source.properties[i].key == params.key) { found = true; ctx._source.properties[i].value = params.value; break; }}" +
" if (!found) { ctx._source.properties.add(['key':params.key, 'value':params.value]); }", parameters);
request.script(inline);
// 执行更新请求
UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);
更新多 id 嵌套属性
// 创建批量请求
BulkRequest request = new BulkRequest();
// 创建脚本
Map<String, Object> parameters = new HashMap<>();
parameters.put("key", "your_key");
parameters.put("value", "new_value");
Script inline = new Script(ScriptType.INLINE, "painless",
"def found = false; for (int i = 0; i < ctx._source.properties.length; ++i) {" +
" if (ctx._source.properties[i].key == params.key) { found = true; ctx._source.properties[i].value = params.value; break; }}" +
" if (!found) { ctx._source.properties.add(['key':params.key, 'value':params.value]); }", parameters);
// 添加多个更新请求到批量请求
for (String id : your_ids) {
UpdateRequest updateRequest = new UpdateRequest("your_index", id);
updateRequest.script(inline);
request.add(updateRequest);
}
// 执行批量请求
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
更新多 id 多个嵌套属性
// 创建批量请求
BulkRequest request = new BulkRequest();
// 创建脚本参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("properties", Arrays.asList(
new HashMap<String, Object>() {{ put("key", "your_key1"); put("value", "new_value1"); }},
new HashMap<String, Object>() {{ put("key", "your_key2"); put("value", "new_value2"); }}
// 添加更多属性...
));
// 创建脚本
Script inline = new Script(ScriptType.INLINE, "painless",
"for (def property : params.properties) {" +
" def found = false;" +
" for (int i = 0; i < ctx._source.properties.length; ++i) {" +
" if (ctx._source.properties[i].key == property.key) {" +
" found = true;" +
" ctx._source.properties[i].value = property.value;" +
" break;" +
" }" +
" }" +
" if (!found) {" +
" ctx._source.properties.add(property);" +
" }" +
"}", parameters);
// 添加多个更新请求到批量请求
for (String id : your_ids) {
UpdateRequest updateRequest = new UpdateRequest("your_index", id);
updateRequest.script(inline);
request.add(updateRequest);
}
// 执行批量请求
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
相关文章