elasticsearch RestHighLevelClient 关于document的常用操作 ---------- 编辑篇
es中的编辑分为:基于id的单条件编辑、自定义条件的编辑
基于id的单条件编辑:UpdateRequest
基于自定义条件的编辑:需借助底层脚本语言来实现有高低版本区分(见文章尾部)更新于2021-09-01
//es单条操作--修改文档(记录)
public String editEsDocument(){ //开始设置属性
Elasticsearch elasticsearch = new Elasticsearch();
elasticsearch.setUserName("张三");
elasticsearch.setAge(190);
elasticsearch.setSex("男"); //创建修改文档的请求对象
UpdateRequest updateRequest = new UpdateRequest(); //指定要操作哪个索引下的那个id的值
updateRequest.index("user").id("sAMC7XgBrgVVHTXvmYL_"); //以json格式添加文档信息
updateRequest.doc(XContentType.JSON ,
"userName" , elasticsearch.getUserName(),
"age" , elasticsearch.getAge(),
"sex" , elasticsearch.getSex()); //像es服务器发送请求
UpdateResponse update = null;
try {
update = this.client.update(updateRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("update es index _index is : " + update.getIndex());
System.out.println("update es index _id is : " + update.getId());
System.out.println("update es index _result is : " + update.getResult()); return "edit es index complete";
}
特殊情况:
基于ID的map数据类型修改操作
针对map数据类型的修改操作,可以依托实体类或自定义条件时设置的数据结构来进行,无须特殊处理。
public void mapTestUpdate(){ //通过实体类做修改属性
Map map = new HashMap();
map.put("数学" , "99");
// Person person = new Person();
// person.setAge(66);
// person.setScoure(map); //通过自己拼装数据来修改属性
Map attrMap = new HashMap();
attrMap.put("age" , 25);
attrMap.put("scoure" , map); //指定要操作哪个索引下的那个id的值
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index("map_test");
updateRequest.id("9Pztx3kB0gyd9uM48juS");
// updateRequest.doc(com.alibaba.fastjson.JSON.toJSONString(person) , XContentType.JSON);
updateRequest.doc(com.alibaba.fastjson.JSON.toJSONString(attrMap) , XContentType.JSON); //像es服务器发送请求
UpdateResponse update = null;
try {
update = this.client.update(updateRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("update es index _index is : " + update.getIndex());
System.out.println("update es index _id is : " + update.getId());
System.out.println("update es index _result is : " + update.getResult());
}
自定义条件更新:
适用于低版本es例如6.6.2版本
调用的地方:
借助bool查询来确认修改数据的范围,must相当于and should相当于or。支持多条件检索
借助ctx._source来指定要修改哪些数据,须将被修改的数据拼接成字符串。支持多字段修改
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(QueryBuilders.termQuery("type", 1));
queryBuilder.must(QueryBuilders.termQuery("enpProjectCode.keyword", k));//相当于mysql中update的where部分,用于指定要修改哪些数据。字符串类型记得加keyword
enpProjectDiagramInitDao.updateByQuery(queryBuilder, "ctx._source.enpProjectCode='" + v + "'");//相当于mysql中update的set部分,用于指定将数据修改成啥样
具体自定条件的执行的地方:
getClient是用于获取链接的根据自己的环境进行调整即可
getIndex getType用于获取当前被操作Index的信息
数据会以json格式的形式拼接进去像es服务发送请求来进行操作
public boolean updateByQuery(QueryBuilder query, String scriptStr) {
boolean flag = true;
RestClient lowClient = getClient().getLowLevelClient();
Map<String, Object> scriptMap = new HashMap<String, Object>();
scriptMap.put("source", scriptStr);
scriptMap.put("lang", "painless");
String param = "{\"query\":" + query.toString() + ",\"script\":" + JSON.toJSONString(scriptMap) + "}";
HttpEntity entity = new NStringEntity(param, ContentType.APPLICATION_JSON);
Map<String, String> map = new HashMap<String, String>();
try {
Response res = lowClient.performRequest("POST",
"/" + getIndex() + "/" + getType() + "/_update_by_query?conflicts=proceed&refresh=true", map,
entity); if (res.getStatusLine().getStatusCode() != 200) {
flag = false;
}
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
flag = false;
}
return flag;
}
适用于高版本es例如7.X以上版本
//自定义条件更新
public void customUpdateCondition() throws IOException { //组装各种更新数据的条件。相当于mysql中update语句内的where部分 must=and should=or
QueryBuilder edu = QueryBuilders.termQuery("education.keyword", "本科");
QueryBuilder weight = QueryBuilders.termQuery("weight", 110);
RangeQueryBuilder totalScore = QueryBuilders.rangeQuery("totalScore");
totalScore.gte(86);
totalScore.lte(1000);
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.should(edu);
queryBuilder.should(weight);
queryBuilder.should(totalScore); UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(); //指定具体要操作的索引
updateByQueryRequest.indices("user"); //加载更新数据。相当于mysql中update语句内的set部分
updateByQueryRequest.setQuery(queryBuilder);
String setValuesStr = "ctx._source.userName='小明1';ctx._source.height='5544'";
Script script = new Script(ScriptType.INLINE, "painless", setValuesStr, Collections.emptyMap());
updateByQueryRequest.setScript(script); //更新
this.client.updateByQuery(updateByQueryRequest, RequestOptions.DEFAULT);
}
elasticsearch RestHighLevelClient 关于document的常用操作 ---------- 编辑篇的更多相关文章
- Elasticsearch本地环境安装和常用操作
本篇文章首发于我的头条号Elasticsearch本地环境安装和常用操作,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干 ...
- 数据结构之链表-链表实现及常用操作(C++篇)
数据结构之链表-链表实现及常用操作(C++篇) 0.摘要 定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...
- ElasticSearch之映射常用操作
本文案例操作,建议先阅读我之前的文章<ElasticSearch之安装及基本操作API> Mapping (映射)类似关系型数据库中的表的结构定义.我们将数据以 JSON 格式存入到 El ...
- Elasticsearch(ES)API 增删查改常用操作
常用操作 查询所有数据 POST http://192.168.97.173:27009/logstash_test_2018/doc/_search { "query": { & ...
- 【3】Chrome 的一些常用操作
记录一些 Chrome 的常用操作 1. 让页面可以编辑 1). 在 控制台 输入 document.designMode = 'on'; 链接地址>>
- elasticsearch RestHighLevelClient 使用方法及封装工具
目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...
- vim(vi)常用操作及记忆方法
vi(vim)可以说是linux中用得最多的工具了,不管你配置服务也好,写脚本也好,总会用到它.但是,vim作为一个“纯字符”模式下的工具,它的操作和WINDOWS中的文本编辑工具相比多少有些复杂.这 ...
- linux常用操作指令
Linux常用操作指令: 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(a ...
- java与.net比较学习系列开发环境和常用调试技巧常用操作快捷键
调试 F5 F11 调试运行 CTRL+F5 暂无 非调试运行 F6 不适用 编译整个解决方案 SHIFT+F6 不适用 编译当前选择的工程 SHIFT+F5 CTRL ...
- (转载)StringGrid常用属性和常用操作
Delphi StringGrid常用属性和常用操作 StringGrid组件用于建立显示字符串的网格,与电子表格相似.它可使表格中的字符串和相关对象操作简单化.StringGrid组件提供了许多可控 ...
随机推荐
- Selenium KPI接口 iframe切换
应用场景: 在编写脚本的时候,经常会发现最熟悉的错误"元素定位不到",此时如果你查看页面元素,有可能你会发现元素在>标签对之间. 此时,我们只有先将代码驱动切换到frame内 ...
- DBeaver 连接 mysql 报错:Public Key Retrieval is not allowed
前言 DBeaver 连接 mysql 报错:Public Key Retrieval is not allowed 遇到 "Public Key Retrieval is not allo ...
- node_modules/@umijs/runtime" does not exist in container.
使用 umi 脚手架搭建项目,启动时报错 node_modules/@umijs/runtime" does not exist in container. 出现问题 .umi 是临时文件夹 ...
- 搭建自己的OCR服务,第一步:选择合适的开源OCR项目
一.OCR是什么? 光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程. 亦即将图像中的文字进行识别 ...
- Object类--toString方法--java进阶day05
1.Object类.以及通用的类 2.toString方法 默认的toString方法,返回的是地址值(全类名再加上通过地址值算出来的十六进制哈希值) . 为什么打印语句会自动调用toString方法 ...
- 话说Hangfire
参考文档 www.hangfire.io github.com/HangfireIO/Hangfire .NET Core开源组件:后台任务利器之Hangfire
- creative打靶学习笔记(4)
参考视频[Tryhackme系列网安课程-Creative-难度3-哔哩哔哩] https://b23.tv/6qzkzyh nmap扫描安装MONyog_6.6.3.exe文件,步骤如下: 2)停止MONyog服务 3)将MONyog.exe和MONyog-patch.exe文件放到E:\MONyog\bin目录下 ...
- AI浏览器自动化实战
只需一句话,AI 即可自动操作浏览器: 搜索商品: 下单支付: 甚至还能进行深度研究(Deep Research),自动生成完整的攻略报告: Browser use 是一个开源项目,使 AI 大模型能 ...