首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【转】Easysearch 中 PUT 和 POST 更新索引的区别及常见错误解析

【转】Easysearch 中 PUT 和 POST 更新索引的区别及常见错误解析

作者头像
保持热爱奔赴山海
发布2025-04-10 11:30:50
发布2025-04-10 11:30:50
3410
举报
文章被收录于专栏:数据库相关数据库相关

在 Easysearch (国产化的Elasticseach)中,PUT 和 POST 都用于创建或更新文档,但它们的使用方式和行为有所不同。理解这些区别并正确使用,可以避免常见的错误,并确保数据操作符合预期。

1. PUT 用于创建或完全替换文档

PUT 方法要求必须提供文档 ID,用于创建或完全替换已有文档。如果指定的文档 ID不存在,则 PUT 会创建一个新文档;如果该 ID 已存在,则会完全覆盖原有数据,不会保留任何旧字段。

✅ 示例

代码语言:txt
复制
PUT my_index/_doc/1
{
  "myindex": 123
}

执行效果

如果 ID 1 存在,原有文档会被完全覆盖,只保留 myindex 字段。

如果 ID 1 不存在,则创建一个新文档。

❌ 常见错误

代码语言:txt
复制
PUT my_index/_doc

错误返回

代码语言:txt
复制
{
  "error": "Incorrect HTTP method for uri [/my_index/_doc] and method [PUT], allowed: [POST]",
  "status": 405
}

错误原因

PUT 需要指定文档 ID,但该请求缺少 ID,导致错误。

2. POST 用于创建或部分更新文档

POST 既可以用于创建文档,也可以用于部分更新文档。其最大特点是可以省略文档 ID,让 Easysearch 自动生成唯一 ID。

✅ 示例 1:创建文档(自动生成 ID)

代码语言:txt
复制
POST my_index/_doc
{
  "name": "Bob",
  "age": 30
}

Easysearch 自动分配 ID 并存储数据。

✅ 示例 2:部分更新【注意】

如果要仅修改某个字段,而不影响其他数据,应该使用 _update

代码语言:txt
复制
POST my_index/_update/1
{
  "doc": {
    "age": 26
  }
}

只修改 age,不会删除 name 等其他字段。

❌ 常见错误

代码语言:txt
复制
POST my_index/_doc/1
{
  "a": 123
}

错误原因

POST 传入了指定 ID,但 POST 的默认行为是创建新文档,不适用于替换已有文档,可能会导致数据不一致。因此,替换文档应使用 PUT,部分更新应使用 _update。

如果使用下面这种写法,会导致_doc为1的其他信息都被删除,只剩age为26的信息【注意】

代码语言:txt
复制
POST my_index/_doc/1
{
  "doc": {
    "age": 26
  }
}

🚨 不推荐使用 POST 替代 PUT 进行替换,官方推荐:

PUT 明确用于创建/替换。

POST 适用于新增(不带 ID)或部分更新(_update API)。

3. POST my_index(省略 _doc)的错误解析

❌ 错误示例

代码语言:txt
复制
POST my_index
{
  "name": "Alice"
}

❌ 错误返回

代码语言:txt
复制
{
  "error": "Incorrect HTTP method for uri [/my_index] and method [POST], allowed: [HEAD, DELETE, PUT, GET]",
  "status": 405
}

错误原因

这个是新建索引设置mapping的格式,不能用于创建索引数据。

✅ 正确做法

代码语言:txt
复制
PUT my_index/_doc/1
{
  "name": "Alice"
}

4. PUT POST 的区别总结

5. 结论与最佳实践

为了保证数据的正确性和操作的高效性,推荐使用以下方式:

代码语言:txt
复制
新增数据(自动 ID) → POST my_index/_doc
新增数据(指定 ID) → PUT my_index/_doc/{id}
修改部分字段 → POST my_index/_update/{id}
完全替换文档 → PUT my_index/_doc/{id}

通过正确使用 PUT 和 POST,可以避免 POST my_index 这种格式错误,并正确管理 Easysearch 的索引和文档,确保数据操作符合预期。

💡 推荐大家在 Easysearch Console 进行实践,以更直观地理解这些区别!

4. PUT 和 POST 的区别总结

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. PUT 用于创建或完全替换文档
  • 2. POST 用于创建或部分更新文档
  • 3. POST my_index(省略 _doc)的错误解析
  • 4. PUT 和 POST 的区别总结
  • 5. 结论与最佳实践
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档