最新elasticsearch7(二、批量插入存在即更新java)
文章目录
- 前言
- 唯一键
- 批量插入
- 批量插入或更新
- 结尾
前言
本篇开发环境基于上篇,客户端client使用rest风格的高等级(high level)API,这节我们来讲下ES的批量插入或更新操作。
唯一键
这里先提个概念,存在则更新。ES是以_id来作为doc的唯一键的,等同于主键,但它没有像关系型数据库的索引,不过我们开始可以利用_id来实现我们唯一索引的目的。当有多个字段需作为唯一键时,我们可以利用hash的方式生成一个唯一id,es支持自定义id值,这样就可以实现唯一索引了。
批量插入
批量操作需要使用bulk api。代码中的IndexRequest允许两张操作类型DocWriteRequest.OpType.CREATE
(新增操作)和DocWriteRequest.OpType.INDEX
(存在则替换)
@Autowiredprivate RestHighLevelClient highLevelClient;public void bulkTest() throws IOException {BulkRequest request = new BulkRequest(); request.add(new IndexRequest("posts").id("1") .source(XContentType.JSON,"field", "foo"));request.add(new IndexRequest("posts").id("2") .source(XContentType.JSON,"field", "bar").opType(DocWriteRequest.OpType.CREATE));highLevelClient.bulk(request, RequestOptions.DEFAULT);}
批量插入或更新
由于IndexRequest不能实现我们的需求,所以存在则修改操作还需要借助UpdateRequest来实现。但是普通UpdateRequest请求只能修改存在的doc,所以还需要寻找其他方法,我们在文档中找到upsets,该方法的描述是:
If the document does not already exist, it is possible to define some
content that will be inserted as a new document using the upsert
method
所以我们可以利用这个方法来实现插入批量插入或更新。数据量较大时可以使用bulkAsync异步插入,这里演示使用同步方式。
public void bulkUpdate() throws IOException {BulkRequest request = new BulkRequest();request.add(new UpdateRequest("sign1","1").doc(XContentType.JSON, "name", "tom").upsert());request.add(new UpdateRequest("sign1","1").doc(XContentType.JSON, "name", "bob", "age", 10).upsert());highLevelClient.bulk(request, RequestOptions.DEFAULT);}
执行后可以看到_id为1的文档,name被替换了,age也添加了
结尾
下节我们来看下最新的Elasticsearch7如果利用jdbc实现sql方式查询,网上的很多用例版本都比较久,测试起来bug也较多。
最新elasticsearch7(二、批量插入存在即更新java)相关推荐
- java如何批量导入题目_MyBatis 如何批量插入?
方式一.打开批量插入的 SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); Us ...
- 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化
目录 一.PreparedStatement和Statement的区别去联系 一.preparedStatement与Statement的联系: 二.区别: 二.批量插入数据到数据的逐步优化 一. ...
- mybatis批量插入(insert)和批量更新(update)
文章目录 一.Mybatis批量插入 二.批量更新 前言:这两天在做mybatis批量插入和更新的时候,对这块不是很清楚,所以今天写篇文章,巩固加深印象. 一.Mybatis批量插入 批量插入的sql ...
- Hibernate 批量插入、更新与删除
http://blog.sina.com.cn/s/blog_54829a240100glku.html 批量插入 在项目的开发过程之中,由于项目需求,我们常常需要把大批量的数据插入到数据库.数量级有 ...
- MySQL + MyBatis 批量插入时存在则忽略或更新记录
一.存在时则忽略 为什么在发现重复时会忽略?这里面涉及到两个地方. 1.重复则忽略.那么首先是需要判断是否重复,这里是通过唯一索引判断是否重复的.如果表中唯一索引的字段已经存在与将要插入的记录行中唯一 ...
- ef oracle 批量更新慢_详解Oracle中多表关联批量插入、批量更新与批量删除
概述 今天主要介绍一下Oracle数据库中多表关联批量插入.多表关联批量更新和多表关联批量删除.下面用实验来理解下~ 一.创建必须的表和序列语句 --创建部门表 dept:CREATE TABLE d ...
- mybatis-generator插件使用 批量插入、更新
1. <dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-g ...
- mysql jdbc驱动 批量更新_jdbc批量插入,删除,更新
批量处理:一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能. 不确定JDBC驱动程序是否支持此功能.应该使用DatabaseMetaData.supportsBatchUpdates( ...
- jdbc批量插入、批量删除、批量更新
谨记:字符串拼接的时候一定要用引号引起来. 技巧:当jdbc处理sql语句时提示错误,可以将执行的sql语句打印出来,然后再在数据库中执行,从而解决错误. 一.JDBC的批量插入 JDBC批量插入主要 ...
最新文章
- 《防患未然:实施情报先导的信息安全方法与实践》——3.3 攻击剖析
- FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计
- C#可选参数、命名参数、参数数组
- MS17-010(永恒之蓝)漏洞分析与复现
- python2的默认数字类型_1.2python基础_数字类型_数字(Number)类型
- python里面如何安装nltk_nltk的安装和简单使用
- 【java】Java实现单向链表反转
- java窗体输入数据怎么存,java编程之计算矩阵对角线和(从对话窗体输入数据)...
- JaveScript用二分法与普通遍历(冒泡)
- C++ 中的mutable关键字
- 西门子STEP7 OPC SERVER的组态
- Oracle DG Broker 进行 SwitchOver Failover,Failover后恢复主从同步
- java 数独算法_[Java] 数独生成和求解
- 易企秀H5 json配置文件解密分析
- MacTeX添加.sty文件
- composer 报错 The “https://mirrors.aliyun.com/composer/p....json“ file could not be downloaded (HTTP/1
- 【数智化案例展】杭州市某区统计局——AIxRPA数字员工技术赋能新经济监测项目...
- 泰萌主今天怎么显示服务器异常,泰萌主网络请求错误怎么办?泰萌主怎么看不了了?...
- 第一章 初到贵地 Win32异界类型
- 大规模分布式图学习框架Euler——安装和使用
热门文章
- 东莞这位农民工大叔,火了!
- FFmpeg简述,源码分析,录制/压缩/水印/剪切/旋转/滤镜/美颜/上传视频等(CPU软编码和解码)
- 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)
- pay 和 put的用法
- 小米手机liveplayer安装包_小米直播助手手机版官方下载
- 1550:花神游历各国
- HITRAN数据库的使用以及普朗克平均吸收系数的计算
- 天猫复购用户预测之DIN模型
- 用例设计(记录东西,写给自己看的)
- 计算机开机键on,计算器上的开机键是?关机键是