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

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


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

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

示例

PUT my_index/_doc/1
{
  "myindex": 123
}

执行效果

  • 如果 ID 1 存在,原有文档会被完全覆盖,只保留 myindex 字段。
  • 如果 ID 1 不存在,则创建一个新文档。

常见错误

PUT my_index/_doc
错误返回
{
  "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)

POST my_index/_doc
{
  "name": "Bob",
  "age": 30
}
  • Easysearch 自动分配 ID 并存储数据。

示例 2:部分更新

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

POST my_index/_update/1
{
  "doc": {
    "age": 26
  }
}
  • 只修改 age,不会删除 name 等其他字段。

常见错误

POST my_index/_doc/1
{
  "a": 123
}
错误原因
  • POST 传入了指定 ID,但 POST 的默认行为是创建新文档,不适用于替换已有文档,可能会导致数据不一致。因此,替换文档应使用 PUT,部分更新应使用 _update

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

  • PUT 明确用于创建/替换。
  • POST 适用于新增(不带 ID)或部分更新(_update API)。

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

错误示例

POST my_index
{
  "name": "Alice"
}

错误返回

{
  "error": "Incorrect HTTP method for uri [/my_index] and method [POST], allowed: [HEAD, DELETE, PUT, GET]",
  "status": 405
}
错误原因

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

正确做法

POST my_index/_doc
{
  "name": "Alice"
}

或者:

PUT my_index/_doc/1
{
  "name": "Alice"
}

4. PUTPOST 的区别总结

操作PUT my_index/_doc/1(替换)POST my_index/_doc/1(不推荐)POST my_index/_doc(创建)POST my_index(错误)
是否需要 ID✅ 需要✅ 需要(不推荐)❌ 不需要(自动生成)❌ 不能直接 POST my_index
文档是否存在✅ 存在则完全替换✅ 存在时完全替换(不推荐)✅ 创建新文档❌ 报错
是否部分更新❌ 不支持❌ 不支持❌ 不支持❌ 报错
适用场景创建/替换整个文档(不推荐)创建新文档❌ 需要 /_doc

5. 结论与最佳实践

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

  • 新增数据(自动 ID)POST my_index/_doc
  • 新增数据(指定 ID)PUT my_index/_doc/{id}
  • 修改部分字段POST my_index/_update/{id}
  • 完全替换文档PUT my_index/_doc/{id}

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

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

Easysearch Console 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值