# 环境描述标签:index,修改,indexRequest,updateRequest,索引,es5.1,client,new,id From: https://blog.51cto.com/u_16021118/6140756
使用es版本为:5.1.1
使用client为:TransportClient client,不是highLevelClient
# 1. 知道当前数据rowid时
UpdateRequest updateRequest = new UpdateRequest("index-2021.08.16","type","rowid")
.doc(Map.of("agent","aa"));
updateRequest.docAsUpsert(true);
client.update(updateRequest);
# 2. 知道当前数据rowid时 (第二种)
// 创建更新对象
UpdateRequest updateRequest = new UpdateRequest(index,type,id);
// 创建一个indexRequest对象指定索引名,类型,和文档id
IndexRequest indexRequest = new IndexRequest(index,type,id);
// 将需要修改的字段放进source里面,这里的ma可以是map,json,string,以及xtContentBuilder对象
indexRequest.source(data);
// 创建一个updateRequest对象指定索引名,类型,id,然后将indexRequest传入upsert方法中
updateRequest.upsert(indexRequest);
// 再将indexRequest放入doc中,猜测实际做了两次修改
updateRequest.doc(indexRequest);
// 最后发送请求
try {
UpdateResponse updateResponse= client.update(updateRequest).get();
return updateResponse.status().getStatus();
} catch (Exception e) {
e.printStackTrace();
}
# 3. 不知道当前数据rowid时
// 创建更新对象
UpdateRequest updateRequest = new UpdateRequest(index,type,id);
// 创建一个indexRequest对象指定索引名,类型,和文档id
IndexRequest indexRequest = new IndexRequest(index,type,id);
// 将需要修改的字段放进source里面,这里的ma可以是map,json,string,以及xtContentBuilder对象
indexRequest.source(data);
// 创建一个updateRequest对象指定索引名,类型,id,然后将indexRequest传入upsert方法中
updateRequest.upsert(indexRequest);
// 再将indexRequest放入doc中,猜测实际做了两次修改
updateRequest.doc(indexRequest);
// 最后发送请求
try {
UpdateResponse updateResponse= client.update(updateRequest).get();
return updateResponse.status().getStatus();
} catch (Exception e) {
e.printStackTrace();
}
# 4. 不知道当前数据rowid时 (第二种,highLevelClient时使用)
UpdateByQueryRequest request = new UpdateByQueryRequest();
request.setDocTypes("student");
request.setQuery(new TermQueryBuilder("name","黑骑一户"));
client.updateByQuery(request);
# 5. 当不知道rowid时 (实时刷新更新数据的)
BulkIndexByScrollResponse bulkIndexByScrollResponse = UpdateByQueryAction.INSTANCE.newRequestBuilder(client) // 创建新的请求builder
.source(index) // 设置索引index
.filter(QueryBuilders.termQuery("msg", alertId)) // 设置过滤条件
.script(new Script(ScriptType.INLINE, "painless", "ctx._source.msg='cc'", Collections.EMPTY_MAP)) // 设置批量修改脚本
.abortOnVersionConflict(false) // 设置ES版本导致问题失败是否停止运行
.get();// 执行请求命令