ElasticSearch版本控制--java实现
一、前言
最近工作中有这样一个ElasticSearch(以下简称ES)写入的场景,Flink处理完数据实时写入ES。现在需要将一批历史数据通过Flink加载到到ES,有两个点需要保证:
- 对于历史数据,ES已有文档,则舍弃旧数据,ES没有则插入历史数据。
- 对于新数据,能对现有的ES数据进行更新。
参考ElasticSearch进阶篇(一)--版本控制,可以使用ES的版本实现该需求的开发。
二、代码实现及验证
代码实现
请求写数据时加入version和version_type参数,主要代码如下:
IndexRequest indexRequest = Requests.indexRequest()
.index(indexName)
.id("1")
// 指定版本比较的业务字段,具体业务具体分析,一般取时间戳较为合适
.version(Long.parseLong(dataMap1.get("create").toString()))
// 指定使用外部版本号
.versionType(VersionType.EXTERNAL)
.source(dataMap);
验证
验证demo可使用当前时间的时间戳作为版本比较依据。验证思路如下:
- 运行demo程序,在当前时间戳下,插入一条数据,通过kibana等工具检验数据是否插入成功。并记录当前的时间戳。
- 更改某些字段值对数据进行更新,再次运行程序,检验数据是否更新成功。
- 将时间版本比较的字段值固定为第一次执行程序的时间戳,检验数据是否更新成功。
验证结果如下图:
三、总结
由截图可看到,第一步和第二步都能执行成功,第三步执行会出现版本冲突的异常,根据提示很方便能识别出原因,即文章中得出的结论,使用version和version_type=EXTERNAL进行版本控制时,只有要写入文档的版本号大于已有文档的版本号才能更新成功。
案例代码参考:elasticsearch_demo
ElasticSearch版本控制--java实现的更多相关文章
- Elasticsearch中JAVA API的使用
1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...
- ELK 学习笔记之 elasticsearch 版本控制
版本控制: elasticsearch 版本控制: 内部版本控制 外部版本控制 内部版本控制: 内部版本会检查你提供的版本值和文档的版本值是否一致,如果不一致就报错,一致则可以更新. curl -XP ...
- 使用Java操作Elasticsearch(Elasticsearch的java api使用)
1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...
- elasticsearch版本控制及mapping映射属性介绍
学习elasticsearch不仅只会操作,基本的运行原理我们还是需要进行了解,以下内容我讲对elasticsearch中的基本知识原理进行梳理,希望对大家有所帮助! 一.ES版本控制 1.Elast ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- Elasticsearch【JAVA REST Client】客户端操作
ES系统作为集群,环境搭建非常方便简单. 现在在我们的应用中,如何对这个集群进行操作呢? 我们利用ES系统,通常都是下面的架构: 在这里,客户端的请求通过LB进行负载均衡,因为操作任何一个ES的实例, ...
- Elasticsearch及java客户端jest使用
本文使用Github中的Elasticsearch-rtf,已经集成了众多的插件,例如必须使用的中文分词等,可以简单的通过配置来启用中文分词.本文主要分为以下几部分: 1.配置和启用中文分词: 2.定 ...
- elasticsearch之JAVA环境变量报错:could not find java; set JAVA_HOME or ensure java is in PATH
在以RPM包安装elasticsearch过程中出现报错JAVA环境的问题: ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/ ...
- ElasticSearch的java api
pom <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> ...
随机推荐
- win10 共享文件夹设置无需用户名密码访问
文件夹设置共享,添加Everyone 文件夹右键属性,选择共享,添加Everyone,添加后可设置读写权限. 权限添加Everyone,不然没有权限访问 设置安全策略 Win+R 打开运行,输入 se ...
- js实现文字分割动画
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- ptm经验总结
- 32. Longest Valid Parentheses **堆栈
description: Given a string containing just the characters '(' and ')', find the length of the longe ...
- 计算机网络体系结构整理-第二单元IP技术
IP技术 1.IPV4 Ipv4的报头格式 Ipv4地址分为ABCDE类, 类别 IP地址范围 私有IP地址范围 A 0.0.0.0-127.255.255.255 10.0.0.0-10.255.2 ...
- 「CF527E」 Data Center Drama
「CF527E」 Data Center Drama 传送门 显然一个环肯定满足题目条件. 然后我就开始想:先整一棵 \(\texttt{DFS}\) 树,然后非树边从深度深的节点向深度浅的节点连边, ...
- 「HEOI2016/TJOI2016」排序
「HEOI2016/TJOI2016」排序 题目大意 给定一个 \(1\) 到 \(n\) 的排列,每次可以对这个序列的一个区间进行升序/降序排序,求所有操作后第 \(q\) 个位置上的数字. 题解 ...
- 详解Spring中Bean的作用域与生命周期
摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我 ...
- [刘阳Java]_Web前端入门级练习_迅雷首页第一屏设计
今天接着上一篇文章<Web前端入门级练习_迅雷官宣网设计>正式开始迅雷首页第一版的设计.如果完成,则最终的效果图如下 第一步:先完成logo部分的设计 logo设计,我们会使用CSS的定位 ...
- 常用的jquery加载后执行的写法
(function(doc){ })(document); $(function(){ }) jQuery(function(){ }) $(document).ready(function(){ } ...