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

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


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

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

示例

1
2
3
4
PUT my_index/_doc/1
{
"myindex": 123
}

执行效果

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

常见错误

1
PUT my_index/_doc

错误返回

1
2
3
4
{
"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)

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

示例 2:部分更新

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

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

常见错误

1
2
3
4
POST my_index/_doc/1
{
"a": 123
}

错误原因

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

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

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

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

错误示例

1
2
3
4
POST my_index
{
"name": "Alice"
}

错误返回

1
2
3
4
{
"error": "Incorrect HTTP method for uri [/my_index] and method [POST], allowed: [HEAD, DELETE, PUT, GET]",
"status": 405
}

错误原因

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

正确做法

1
2
3
4
POST my_index/_doc
{
"name": "Alice"
}

或者:

1
2
3
4
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 🚀

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

https://xu-hardy.github.io/easysearch-中-put-和-post-更新索引的区别及常见错误解析/

作者

Xu

发布于

2025-07-02

更新于

2025-07-01

许可协议

评论