当前位置: 首页 > java >正文

【Elasticsearch】PUT` 请求覆盖式更新

是的,Elasticsearch 中的 `PUT` 请求是覆盖式的。当你使用 `PUT` 请求向索引中写入文档时,如果文档已经存在,Elasticsearch 会完全替换整个文档的内容,而不是进行部分更新。

 

覆盖式的具体行为

- 文档存在时:`PUT` 请求会用新提供的 JSON 数据完全替换掉旧文档的内容。

- 文档不存在时:`PUT` 请求会创建一个新的文档,并使用提供的 JSON 数据作为文档内容。

 

示例

假设你有一个文档,初始内容如下:

 

```json

{

  "name": "John Doe",

  "age": 25,

  "email": "john.doe@example.com"

}

```

 

现在,你使用 `PUT` 请求更新这个文档:

 

```json

PUT /users/_doc/1

{

  "age": 30,

  "email": "john.doe@example.com"

}

```

 

更新后,文档的内容将变为:

 

```json

{

  "age": 30,

  "email": "john.doe@example.com"

}

```

 

注意,`name` 字段在新的 `PUT` 请求中没有被包含,因此它被移除了。整个文档的内容被完全替换为新的 JSON 数据。

 

使用场景

- 完全替换文档:当你需要更新文档的大部分内容,或者完全重新定义文档时,`PUT` 是一个合适的选择。

- 创建新文档:当你不确定文档是否存在时,`PUT` 也可以用来创建新文档。

 

注意事项

- 数据丢失风险:由于 `PUT` 是覆盖式的,如果你没有在请求中包含某些字段,这些字段将被删除。因此,在使用 `PUT` 时,需要确保请求中包含了所有需要保留的字段。

- 并发问题:在多用户并发更新同一文档的场景中,`PUT` 可能会导致数据丢失或冲突。为了避免这种情况,可以使用 `if_seq_no` 和 `if_primary_term` 参数来实现乐观锁。

 

示例:使用乐观锁

为了避免并发冲突,可以在 `PUT` 请求中使用 `if_seq_no` 和 `if_primary_term` 参数:

 

```json

PUT /users/_doc/1?if_seq_no=1&if_primary_term=1

{

  "age": 30,

  "email": "john.doe@example.com"

}

```

 

如果文档的序列号(`seq_no`)或主版本号(`primary_term`)与提供的值不匹配,Elasticsearch 将拒绝此次更新操作,从而避免覆盖其他用户的更改。

 

总结来说,`PUT` 请求是覆盖式的,它会完全替换文档的内容。在使用时,需要谨慎处理数据,避免意外丢失字段。

http://www.xdnf.cn/news/9161.html

相关文章:

  • GitHub push失败解决办法-fatal: unable to access ‘https://github.com/xxx
  • 【node】Express创建服务器
  • leetcode hot100刷题日记——19.买卖股票的最佳时机
  • `sysctl`命令深度剖析:如何优化内核参数以提升服务器网络/IO性能?
  • 百度ocr的简单封装
  • html5视频播放器和微信小程序如何实现视频的自动播放功能
  • 优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草·卓伊凡
  • MicroPython 开发ESP32应用教程 之 线程介绍及实例分析
  • Android 启动优化
  • 使用堡塔和XShell
  • C++ STL stack容器使用详解
  • IoT/HCIP实验-1/物联网开发平台实验Part1(快速入门,MQTT.fx对接IoTDA)
  • 大型三甲医院更换HIS系统全流程分析与经验考察(上)
  • 【教程】给Apache服务器装上轻量级的防DDoS模块
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十七) -> 开发云函数
  • 基于 SpringBoot 与 VueJS 的智慧就业服务平台构建:技术融合与实践创新
  • jsAPI:Intl.DateTimeFormat 属性含义
  • 尚硅谷redis7 37-39 redis持久化之AOF简介
  • Vuex 模块化和命名空间:管理大型应用的状态
  • 【MYSQL】Linux下安装mysql 8,rpm包方式安装(保姆篇)
  • 【数据插入最大值后】2022-2-2
  • 【Redis】第2节|Redis基本数据类型
  • 信息学奥赛一本通 1547:【 例 1】区间和
  • 算法-全排列
  • 怎么预测体育比赛的胜率?
  • 曲线匹配,让数据点在匹配数据的一侧?
  • 第12次06 :用户中心添加邮箱
  • 【01】大模型原理与API使用
  • 【本地面板公网访问】本地面板也能公网访问?CasaOS+1Panel+cpolar保姆级教程
  • GeoServer样式设置:使用本地图标及分层/分视野显示