
在 Easysearch (国产化的Elasticseach)中,PUT 和 POST 都用于创建或更新文档,但它们的使用方式和行为有所不同。理解这些区别并正确使用,可以避免常见的错误,并确保数据操作符合预期。
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,导致错误。
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。
如果使用下面这种写法,会导致_doc为1的其他信息都被删除,只剩age为26的信息【注意】
POST my_index/_doc/1
{
"doc": {
"age": 26
}
}🚨 不推荐使用 POST 替代 PUT 进行替换,官方推荐:
PUT 明确用于创建/替换。
POST 适用于新增(不带 ID)或部分更新(_update API)。
❌ 错误示例
POST my_index
{
"name": "Alice"
}❌ 错误返回
{
"error": "Incorrect HTTP method for uri [/my_index] and method [POST], allowed: [HEAD, DELETE, PUT, GET]",
"status": 405
}错误原因
这个是新建索引设置mapping的格式,不能用于创建索引数据。
✅ 正确做法
PUT my_index/_doc/1
{
"name": "Alice"
}PUT 和 POST 的区别总结
为了保证数据的正确性和操作的高效性,推荐使用以下方式:
新增数据(自动 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 删除。