关于ElasticSearch:ElasticSearch版本控制java实现

7次阅读

共计 818 个字符,预计需要花费 3 分钟才能阅读完成。

一、前言

最近工作中有这样一个 ElasticSearch(以下简称 ES)写入的场景,Flink 解决完数据实时写入 ES。当初须要将一批历史数据通过 Flink 加载到到 ES,有两个点须要保障:

  1. 对于历史数据,ES 已有文档,则舍弃旧数据,ES 没有则插入历史数据。
  2. 对于新数据,能对现有的 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 可应用以后工夫的工夫戳作为版本比拟根据。验证思路如下:

  1. 运行 demo 程序,在以后工夫戳下,插入一条数据,通过 kibana 等工具测验数据是否插入胜利。并记录以后的工夫戳。
  2. 更改某些字段值对数据进行更新,再次运行程序,测验数据是否更新胜利。
  3. 将工夫版本比拟的字段值固定为第一次执行程序的工夫戳,测验数据是否更新胜利。

验证后果如下图:


三、总结

由截图可看到,第一步和第二步都能执行胜利,第三步执行会呈现版本抵触的异样,依据提醒很不便能辨认出起因,即 ElasticSearch 进阶篇 (一)– 版本控制中得出的论断,应用 version 和 version_type=EXTERNAL 进行版本控制时,只有要写入文档的版本号大于已有文档的版本号能力更新胜利。

案例代码参考:elasticsearch_demo

正文完
 0