提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
java项目开发中,ES适用读多写少场景,如果存在并发读写,如何保证其安全性提示:以下是本篇文章正文内容,下面案例可供参考
一、基于条件更新
代码示例:
// 查询条件
Map<String,String> queryCondition = new HashMap<>(2);
queryCondition.put("partNo","123");
queryCondition.put("org","v2");
// 更新条件
Map<String,String> updateCondition = new HashMap<>(2);
queryCondition.put("name","更新为张三");
StringBuilder sb = new StringBuilder();
sb.append("ctx_source.").append("name").append("=params.").append("name").append(";");
Script updateParam = new Script(ScriptType.INLINE, "painless", sb.toString(),updateCondition);
// 指定索引库
UpdateByQueryRequestBuiler builder = new UpdateByQueryRequestBuiler(client, UpdateByQueryAction.INSTANCE).source(indexEnum.getIndex());
// 构建boolQuery
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
queryCondition.keySet().forEach(key -> boolQuery.must(QueryBuilders.termQuery(key, queryCondition.get(key))));
builder.filter(boolQuery);
builder.script(updateParam).abortOnVersionConflict(true).refresh(true);
BulkBySrollResponse bulkByScrollResponse = builder.get();
二、指定id
代码示例:
// 更新条件
Map<String,String> updateRequest= new HashMap<>(2);
updateRequest.put("partNo","123");
BulkRequestBuilder bulkRequest = client.prepareBulk();
UpdateRequest updateRequest = new UpdateRequest(esIndexEnum.getIndex(),esIndexEnum.getIndex(), esId).doc(conditionMap).retryOnConflict(3).docAsUpsert(true);
bulkQuest.add(updateRequest);
// 执行请求
BulkResponse bulkResponse = bulkRequest.execute().actionGet();