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