Elastic:什么时候用POST?什么时候用PUT?有什么区别?
【摘要】 首先POST与PUT都可以用于更新和新增操作,但是新增时POST是不用指定ID的,会自动分配;而PUT是需要指定ID的,也就是说PUT是幂等性的,无论你操作多少次结果都是一样的。而POST是操作一遍就新增一条
当他们都用于更新时,POST只会更新相同字段的值,而PUT会将整个数据进行替换,下面我们详细举例来体会
POST与PUT的区别
首先POST与PUT都可以用于更新和新增操作,但是新增时POST是不用指定ID的,会自动分配;而PUT是需要指定ID的,也就是说PUT是幂等性的,无论你操作多少次结果都是一样的。而POST是操作一遍就新增一条
当他们都用于更新时,POST只会更新相同字段的值,而PUT会将整个数据进行替换,下面我们详细举例来体会
新增案例
POST用于新增,比如
POST new_index/_doc
{"name": "555"}
POST new_index/_bulk
{"index":{}}
{"name":"5555"}
PUT用于新增,比如
PUT new_index/_doc/1
{"name":"55","title":"5"}
PUT new_index/_bulk
PUT new_index/_bulk
{"index":{"_id":2}}
{"name":"555555","title":"55"}
修改案例
使用PUT进行更新会将doc全量替换,使用方法和新增一样
PUT new_index/_doc/1
{"name":"66","id":"5"}
当识别到为修改时,返回结果中的操作类型也会为updated
{
"_index" : "new_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 11,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 14,
"_primary_term" : 1
}
需要注意的是,以下形式的POST调用也是全量替换的:
POST new_index/_doc/1
{"name":"66","title":"66"}
但是通过_update调用的更新则是非全量替换的
POST new_index/_update/1
{
"doc": {
"name": "555",
"id": 3
}
}
返回结果,可以看到没有的title字段无影响,只修改了存在的name字段,并且新增了之前不存在的title字段
"hits" : [
{
"_index" : "new_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "555",
"title" : "66",
"id" : 3
}
}
]
_update API是无法通过PUT方式调用的
POST也可用于查询
这里拓展一点,除了我们普遍认为的GET方式查询,POST也可以查询哦
POST new_index/_search
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)