文章目录

  • 前言
  • 唯一键
  • 批量插入
  • 批量插入或更新
  • 结尾

前言

本篇开发环境基于上篇,客户端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)相关推荐

  1. java如何批量导入题目_MyBatis 如何批量插入?

    方式一.打开批量插入的 SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); Us ...

  2. 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化

    目录 ​ 一.PreparedStatement和Statement的区别去联系 一.preparedStatement与Statement的联系: 二.区别: 二.批量插入数据到数据的逐步优化 一. ...

  3. mybatis批量插入(insert)和批量更新(update)

    文章目录 一.Mybatis批量插入 二.批量更新 前言:这两天在做mybatis批量插入和更新的时候,对这块不是很清楚,所以今天写篇文章,巩固加深印象. 一.Mybatis批量插入 批量插入的sql ...

  4. Hibernate 批量插入、更新与删除

    http://blog.sina.com.cn/s/blog_54829a240100glku.html 批量插入 在项目的开发过程之中,由于项目需求,我们常常需要把大批量的数据插入到数据库.数量级有 ...

  5. MySQL + MyBatis 批量插入时存在则忽略或更新记录

    一.存在时则忽略 为什么在发现重复时会忽略?这里面涉及到两个地方. 1.重复则忽略.那么首先是需要判断是否重复,这里是通过唯一索引判断是否重复的.如果表中唯一索引的字段已经存在与将要插入的记录行中唯一 ...

  6. ef oracle 批量更新慢_详解Oracle中多表关联批量插入、批量更新与批量删除

    概述 今天主要介绍一下Oracle数据库中多表关联批量插入.多表关联批量更新和多表关联批量删除.下面用实验来理解下~ 一.创建必须的表和序列语句 --创建部门表 dept:CREATE TABLE d ...

  7. mybatis-generator插件使用 批量插入、更新

    1. <dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-g ...

  8. mysql jdbc驱动 批量更新_jdbc批量插入,删除,更新

    批量处理:一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能. 不确定JDBC驱动程序是否支持此功能.应该使用DatabaseMetaData.supportsBatchUpdates( ...

  9. jdbc批量插入、批量删除、批量更新

    谨记:字符串拼接的时候一定要用引号引起来. 技巧:当jdbc处理sql语句时提示错误,可以将执行的sql语句打印出来,然后再在数据库中执行,从而解决错误. 一.JDBC的批量插入 JDBC批量插入主要 ...

最新文章

  1. 《防患未然:实施情报先导的信息安全方法与实践》——3.3 攻击剖析
  2. FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计
  3. C#可选参数、命名参数、参数数组
  4. MS17-010(永恒之蓝)漏洞分析与复现
  5. python2的默认数字类型_1.2python基础_数字类型_数字(Number)类型
  6. python里面如何安装nltk_nltk的安装和简单使用
  7. 【java】Java实现单向链表反转
  8. java窗体输入数据怎么存,java编程之计算矩阵对角线和(从对话窗体输入数据)...
  9. JaveScript用二分法与普通遍历(冒泡)
  10. C++ 中的mutable关键字
  11. 西门子STEP7 OPC SERVER的组态
  12. Oracle DG Broker 进行 SwitchOver Failover,Failover后恢复主从同步
  13. java 数独算法_[Java] 数独生成和求解
  14. 易企秀H5 json配置文件解密分析
  15. MacTeX添加.sty文件
  16. composer 报错 The “https://mirrors.aliyun.com/composer/p....json“ file could not be downloaded (HTTP/1
  17. 【数智化案例展】杭州市某区统计局——AIxRPA数字员工技术赋能新经济监测项目...
  18. 泰萌主今天怎么显示服务器异常,泰萌主网络请求错误怎么办?泰萌主怎么看不了了?...
  19. 第一章 初到贵地 Win32异界类型
  20. 大规模分布式图学习框架Euler——安装和使用

热门文章

  1. 东莞这位农民工大叔,火了!
  2. FFmpeg简述,源码分析,录制/压缩/水印/剪切/旋转/滤镜/美颜/上传视频等(CPU软编码和解码)
  3. 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)
  4. pay 和 put的用法
  5. 小米手机liveplayer安装包_小米直播助手手机版官方下载
  6. 1550:花神游历各国
  7. HITRAN数据库的使用以及普朗克平均吸收系数的计算
  8. 天猫复购用户预测之DIN模型
  9. 用例设计(记录东西,写给自己看的)
  10. 计算机开机键on,计算器上的开机键是?关机键是