文章目录

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

前言

本篇开发环境基于上篇,客户端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. springwebflux 页面_Spring WebFlux 入门
  2. CentOS中怎样安装、配置、启动Nginx
  3. [转] JavaScript中的属性:如何遍历属性
  4. asp对php预览,Dreamweaver中预览PHP和ASP
  5. python kafka消费实时数据,python生产和消费kafka数据
  6. 如何输入已经以新的TTY运行的Docker容器
  7. java 圆类 圆锥类_以圆类 Circle 及立体图形类 Solid 为基础设计圆锥类 Cone
  8. CountDownLatch和CyclicBarrier 举例详解
  9. MSSQL系列之十四 无限极分类的解决办法
  10. ElK STACK的简要分析
  11. 动态规划算法典型应用之背包问题
  12. JavaScript的事件委托(事件代理)原理
  13. Typo: In word 问题解决。
  14. Linux下Firefox和chrome浏览器flash插件的安装
  15. 【Py】隐藏warnings
  16. excel一列数字前面批量加个逗号
  17. 对物联网的感悟_请谈谈你对物联网的看法?
  18. 如何在Ubuntu系统 上登录北理工教务处查看选项(转自FTP联盟)亲测成功
  19. python多进程爬取上海房价并画出热力图分析
  20. 《示波器仪器》的使用

热门文章

  1. HTML+CSS鲜花网页制作 DW静态网页设计 个人网页制作
  2. 电脑突然关机,如何恢复word文件内容
  3. 挑战华为社招:掌握数据库其实很容易
  4. Boot strap
  5. 电子信息工程就业方向及薪资标准【转载的】
  6. 海妖超级计算机,盖亚航天器探测到的数据,改写了银河系的历史
  7. 你好Python!再见Excel?
  8. 虚拟化服务器采用amd芯片,AMD和Intel比拼芯片辅助虚拟化
  9. 自我介绍 计算机中职教师,中职教师面试自我介绍
  10. 【简单总结】句子相似度计算的几种方法