Easysearch 中 PUT 和 POST 更新索引的区别及常见错误解析
在 Easysearch 中,PUT
和 POST
都用于创建或更新文档,但它们的使用方式和行为有所不同。理解这些区别并正确使用,可以避免常见的错误,并确保数据操作符合预期。
1. PUT
用于创建或完全替换文档
PUT
方法要求必须提供文档 ID,用于创建或完全替换已有文档。如果指定的文档 ID 不存在,则 PUT
会创建一个新文档;如果该 ID 已存在,则会完全覆盖原有数据,不会保留任何旧字段。
✅ 示例
1 | PUT my_index/_doc/1 |
执行效果
- 如果 ID
1
存在,原有文档会被完全覆盖,只保留myindex
字段。 - 如果 ID
1
不存在,则创建一个新文档。
❌ 常见错误
1 | PUT my_index/_doc |
错误返回
1 | { |
错误原因
PUT
需要指定文档 ID,但该请求缺少 ID,导致错误。
2. POST
用于创建或部分更新文档
POST
既可以用于创建文档,也可以用于部分更新文档。其最大特点是可以省略文档 ID,让 Easysearch 自动生成唯一 ID。
✅ 示例 1:创建文档(自动生成 ID)
1 | POST my_index/_doc |
- Easysearch 自动分配 ID 并存储数据。
✅ 示例 2:部分更新
如果要仅修改某个字段,而不影响其他数据,应该使用 _update
:
1 | POST my_index/_update/1 |
- 只修改
age
,不会删除name
等其他字段。
❌ 常见错误
1 | POST my_index/_doc/1 |
错误原因
POST
传入了指定 ID,但POST
的默认行为是创建新文档,不适用于替换已有文档,可能会导致数据不一致。因此,**替换文档应使用PUT
,部分更新应使用_update
**。
🚨 不推荐使用 POST
替代 PUT
进行替换,官方推荐:
PUT
明确用于创建/替换。POST
适用于新增(不带 ID)或部分更新(_update
API)。
3. POST my_index
(省略 _doc
)的错误解析
❌ 错误示例
1 | POST my_index |
❌ 错误返回
1 | { |
错误原因
这个是新建索引设置 mapping 的格式,不能用于创建索引数据。
✅ 正确做法
1 | POST my_index/_doc |
或者:
1 | PUT my_index/_doc/1 |
4. PUT
和 POST
的区别总结
操作 | 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}
通过正确使用 PUT
和 POST
,可以避免 POST my_index
这种格式错误,并正确管理 Easysearch 的索引和文档,确保数据操作符合预期。
💡 推荐大家在 Easysearch Console 进行实践,以更直观地理解这些区别!
🚀
Easysearch 中 PUT 和 POST 更新索引的区别及常见错误解析
https://xu-hardy.github.io/easysearch-中-put-和-post-更新索引的区别及常见错误解析/