最新elasticsearch7(二、批量插入存在即更新java)

批处理 :从ElasticSearch看批处理的性能优势 主要是借着 ES 的优化好好思考了一下批处理带来的好处。IO 和 网络消耗CPU 损耗及上下文切换磁盘损耗和顺序IO原子处理及内存复用,共享了内存,减少了重复操作例如一次事务和多次事务带来的性能差距,对资源的锁定范围等额外的并发消耗,这涉及到多线程情况下的切换,也属于上下文切换,但是和CPU的那个维度不同重复的刷新操作,这种就是代码维度的节省了这一篇主要的目的是说清楚批处理的好处 ,然后在高性能的系统中,要养成批处理的思维。 阅读详情

前言

本篇开发环境基于上篇,客户端client使用rest风格的高等级(high level)API,这节我们来讲下ES的批量插入或更新操作。

唯一键

这里先提个概念,存在则更新。ES是以_id来作为doc的唯一键的,等同于主键,但它没有像关系型数据库的索引,不过我们开始可以利用_id来实现我们唯一索引的目的。当有多个字段需作为唯一键时,我们可以利用hash的方式生成一个唯一id,es支持自定义id值,这样就可以实现唯一索引了。

批量插入

批量操作需要使用bulk api。代码中的IndexRequest允许两张操作类型DocWriteRequest.OpType.CREATE(新增操作)和DocWriteRequest.OpType.INDEX(存在则替换)

    @Autowired
    private 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也较多。

java 程序向 ES8批量插入数据 BulkIngester提供了一个实用程序类,允许将索引/更新/删除操作透明地分组到批量请求中,从而简化了批量API的使用。只需将批量操作添加到ingester中,它就会根据其配置进行分组和批量发送。Bulk批量请求允许在一个请求中向Elasticsearch发送多个与文档相关的操作。当您有多个文档要摄取时,这比用单独的请求发送每个文档更有效。日志批量插入ES,一个请求报文分为多个部分,需要根据插入ES后根据ID自动组合成一个报文。 阅读详情

相关推荐

Java批量插入数据

实现Java批量插入数据库数据,在javaeye中看到过几篇关于实现Java批量插入数据库数据,转载时没有找到,就自己写一下,也算是对自己学习过程中所遇到过的问题做一个总结。 一般关于批量向数据库插入数据都采用PreparedStatement、Statement…………也包括直接使用JDBC API、框架………… 也看到过几篇关于这些内容的总结,及大家的评论,以下为我总结的关于批量向数据库插

Ada 8161

Elasticsearch批量写入,存在就更新Document记录的某个值进行累加,不存在新生成Document记录

最近再做kafka日志消息解析后写入Es的需求,遇到一个特殊需求,需要按照sku维度对日志进行处理,以sku为唯一键,Es中存在则更新Document记录中的热度值(新热度值=原记录热度值+预更新的热度值),不存在则直接新增。 下面为批量处理代码: public void upsertHotValue(List<GoodsHotValueType> list){ if (CollectionUtils.isEmpty(list)) { ret

喜欢新技术的彭英峻 3017

ElasticSearch(5) -- 文档操作

文档,即索引库中某个类型下的数据,会根据规则创建索引,将来用来搜索。可以类比做数据库中的每一行数据。 1. 新增并随机生成id 通过POST请求,可以向一个已经存在的索引库中添加文档数据。 语法: POST /索引库名/类型名 { “key” : “value” } 示例: post /test/goods { "title" : "小米手机", "image":"http://image.leyou.com/12479122.jpg", "price" : 2699.00 } 响应:

erainm 333

Elasticsearch入库优化记录

由于最近要实现Elasticsearch日入8T(最大支持10T)的数据,所以最近对es入库部分的效率,进行了重点验证。 现在的入库程序使用(有专门的程序将原始数据转换成)json文件,批量bulk的方式,实现大量的数据入库。 根据公司这段时间和部分现场的使用情况来看,每台机器每小时大概只能入库20G(现场万兆网:30G),索引创建的速度约:40K-50K/s。 使用Prometheus监控...

rise511的专栏 2077

bulk-async:根据设置尽快运行异步方法

大量异步 根据设置尽快运行异步方法 npm安装批量异步

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

ElasticSearch(ES)JAVA批量更新批量插入——就一步

注:此Es处理方式是基于Spring-data 集成的 1. 批量更新 public void allChangeCart(CartsSearchDTO cartsSearchDTO) { Assert.notNull(cartsSearchDTO, "对象不能为空!"); UpdateByQueryRequestBuilder updateByQue...

MiaoTai 2万+

HLM(多层线性模型)在stata中语句

在阅读CEPS中发现有些研究采用的是HLM模型,HLM简单来说用一个方程跑两个回归。举例,对学习成绩影响因素,不同层有不同的影响,如在个体层面上个体特征会对成绩产生影响,在学校层面学校排名等因素会对成绩产生影响,两种因素不在一个层面,每层造成的差异都不相同。 在找相关语句时候发现操作这个语句的软件大多是SPSS和HLM,对于stata操作者并不友好。因此,在有限资料中总结了HLM在stata中的语句,后面会附上学习视频和链接。 先放语句,后面对方程式一个大致解析。由于针对HLM有一本书的介绍,可能一篇文章无

weixin_44652251的博客 1万+

mongodb的BulkOperations,springboot批量插入数据时若数据库存在数据则更新,同时更新elasticSearch

// mongodb 的批量插入或者更新 List<Pair<Query, Update>> updateList = new ArrayList<>(userTagDocs.size()); BulkOperations operations = mongoTemplate.bulkOps(BulkOpera...

阿甘的码路 4931

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第七讲)

默认是第一种键盘模式,当需要切换模式,进入到ta_event_cb函数修改模式,下面代码以数字模式举例子lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);在该界面中可以设置键盘文字的大小和文本类型,最下方判断键盘是否支持中文输入(中文输入,当汉字库不够大时,用户点击中文输入会少很多字)。//当LV_USE_KEYBOARD为1时启用虚拟键盘,LV_USE_ZH_KEYBOARD为1时支持中文输入。随后在系统设置界面中点击项目选项,选择显示键盘。

weixin_38828382的博客 1414

【PVE9.1使用教程】

弹窗代码在 /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js 中,通过 void({…}) 可以让弹窗部分代码不执行,实现删除弹窗的效果。安装过程这里不再赘述,记得不要使用网络版本进行安装,安装的时候不要使用镜像,否则安装过程会很卡。把下面的配置添加进去,允许同一个网段下的所以主机访问/mnt/pve_share文件夹。可以自己搭建也可以去咸鱼购买,本人在咸鱼上面购买的,暂时可用。也可以使用下面的命令,版本号需要自己查看最新的版本号。

weixin_42950821的博客 960

Mybatis解决以某个字段存在,批量更新,不存在批量插入(高效)(一)

1 | 张三 | 25 | zhangsan@new.com | 0 | ← 被更新。| 3 | 李四 | 35 | lisi@new.com | 1 | ← 新插入。| 4 | 王五 | 28 | wangwu@new.com | 1 | ← 新插入。| 1 | 张三 | 25 | zhangsan@old.com | 1 || 张三(25) | 匹配id=1的记录 |

m0_58680378的博客 1518

SAP ABAP实战:用GN_DELIVERY_CREATE批量创建内部交货单的完整代码与避坑指南

本文详细介绍了在SAP ABAP开发中使用GN_DELIVERY_CREATE函数批量创建内部交货单的完整实现方案。通过数据结构设计、多源数据整合、批量处理逻辑和错误处理机制等核心环节的深入解析,帮助开发者高效完成物流单据自动化处理,特别针对VL31N/VL32N等常见场景提供避坑指南。

weixin_42116058的博客 343

JAVA elasticsearch批量插入

【代码】JAVA elasticsearch批量插入。

前方的路在刚开始 3007

用 ABAP ADK 写一个可控的自建表归档程序:从选择屏幕到 ARCHIVE_SAVE_OBJECT 的完整链路

文章摘要: 本文介绍了SAP系统中数据归档的核心概念与实践方法。归档旨在将不常访问但需保留的数据从在线数据库移出,以减轻系统负载,同时满足合规要求。文章重点阐述了: 归档与备份、重组的本质区别 SAP归档框架的核心组件:归档对象(AOBJ)、归档管理界面(SARA)和ADK开发工具包 通过YAPTMAIN表示例,展示了完整的归档流程: 使用选择屏幕控制归档范围 管理归档会话 写入归档记录 生成统计报表 强调了归档程序设计中需要考虑的运维、审计和性能因素 该方案可有效解决自建日志表"悄悄长胖&quo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 227

SAP Integration Suite 与 SAP Cloud Integration 的关系解析

SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 592

《深入剖析 Elasticsearch:强大的 Java 开源搜索引擎》

本文深入介绍了由 Java 开发的开源搜索引擎 Elasticsearch。它以实时搜索、稳定可靠、快速安装和方便使用等特性,在 Java 开发社区广获认可。Elasticsearch 为开发者提供强大的搜索解决方案,可轻松集成到 Java 项目中,实现快速检索和处理大量数据。

面团到油条的成长日记 1619

多天线技术:5G波束成形&空间复用&空时编码

以提升信号的可靠性。然而,在20世纪90年代中期,研究者们惊讶地发现,多天线技术不仅仅提供分集增益,还可以开启一些单天线系统无法实现的新机遇。,我们可以将信道矩阵 ( H ) 视为一个满秩矩阵,则理论上可以建立min(𝑁𝑇,𝑁𝑅)个独立的数据流,形成一个。波束成形是5G物理层的核心技术,其本质是利用多个天线来增强特定方向上的信号,同时抑制干扰方向的信号。:物理波束成形 = 🔦 类似手电筒的聚焦光束,虚拟波束成形 = 🌊 类似水波的相干叠加。随着 5G 和 6G 时代的到来,多天线技术的作用愈发重

weixin_43199439的博客 1389

java Mybatis+MySQL 批量插入、批量更新、批量查询

随笔记录。亲测可用 1.批量插入 mapper int insertBrandBusinessByExcel(List<Label> list); .xml <!--批量插入--> <insert id="insertBrandBusinessByExcel" parameterType="com.mj.linen.pojo.label.Labe...

青汁的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java 3种批量插入更新操作的效率横向比较

以前总是说批量插入和更新的效率比非批量的要高,但是到底高多少,没有评估过,今天我就具体的测试下(1)三种插入操作的方法1.1 利用for循环的批量插入示例xml &lt;insert id="insertUser"&gt; insert into test_user (u_name,create_date) value (#{userName},SYSDATE()) ...

枫子的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Mybatis 批量操作(批量插入、批量更新、批量删除)总结

文章目录一、批量插入二、批量更新三、批量删除 一、批量插入 <insert id="insertBatch" parameterType="java.util.List"> INSERT INTO business_database (id, person_id, name, id_card, cman, ctime) VALUES <foreach collection="list" index="index" s

ddxshf的博客 3767

Java批量插入、更新数据

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有。今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库。      前台页面: 基本信息 页签1 页签2 页签3

不忘初心 1万+

Mybatis insert update 批量插入数据,并对已存在的数据进行更新

产品又改需求,没办法只能加下班再改改。 需求大意:向表a中插入一批数据,原有的数据只对字段值进行更新,新增的则执行插入 作为一个21世纪的热血青年,当然某问题啊。 于是着手准备开干,想了一下没想到啥好办法,又想了一会儿,得到一个方案: 在插入数据的时候,我先查一下这条数据是否已经存在,如果已经存在我就 update它,如果不存在我就insert它,easy嘛! 准备开始做的时候,发现不对...

不要总是等明天再开始 5507

MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入

基本用法:ON DUPLICATE KEY UPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突(即已存在相同的唯一键值),则会执行更新操作,而不是抛出异常或忽略该条数据。这个语法可以大大简化我们的代码,减少不必要的判断和查询操作。用法总结1:on duplicate key update 语句根据主键id或唯一键来判断当前插入是否已存在。2:记录已存在时,只会更新on duplicate key update之后指定的字段。

2509_93969894的博客 994
上一篇: 最新elasticsearch7(一、增删改查java)
下一篇: 最新elasticsearch7(三、jdbc链接sql查询)
yyoc97
博客等级 码龄12年 272粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值