Elastic:什么时候用POST?什么时候用PUT?有什么区别?

简介: 首先POST与PUT都可以用于更新和新增操作,但是新增时POST是不用指定ID的,会自动分配;而PUT是需要指定ID的,也就是说PUT是幂等性的,无论你操作多少次结果都是一样的。而POST是操作一遍就新增一条

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

目录
相关文章
|
2月前
|
人工智能 自然语言处理 数据挖掘
聊一聊你眼中的Data Agent,它能帮我们完成什么?
Data Agent是结合AI与数据处理能力的智能体,能自主理解、分析并响应数据任务。它贯穿数据源接入、自然语言交互、自动建模到结果输出的全流程闭环。核心技术涵盖NLP、AutoML、实时计算等,助力企业实现高效数据分析与决策。
|
4月前
|
网络协议 安全 网络安全
NAT网络地址转换
NAT(网络地址转换)是一种关键的网络技术,通过将内部私有地址转换为外部公网地址,实现多设备共享单一公网IP上网。它不仅解决了IPv4地址不足的问题,还增强了网络安全,隐藏了内部网络结构。NAT主要分为静态NAT、动态NAT和NAPT(网络地址端口转换)三种类型,广泛应用于家庭和企业网络中。然而,NAT也存在对某些应用不友好、增加延迟及与IPv6不兼容等缺点。
622 14
|
NoSQL Redis
Redis 之 WRONGTYPE Operation against a key holding the wrong kind of value【bug解决】
Redis 之 WRONGTYPE Operation against a key holding the wrong kind of value【bug解决】
11252 0
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
8月前
|
Java API 调度
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
XXL-JOB 是一个分布式任务调度平台,设计目标为开发迅速、学习简单、轻量级、易扩展。它解决了分布式环境下定时任务重复执行的问题,无需额外加锁,降低了维护成本。XXL-JOB 由调度中心和执行器两部分组成,前者管理任务,后者执行具体逻辑,使代码结构更清晰。适用于多机部署场景,支持统一管理任务的启停和频率调整。
888 8
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
|
JSON 应用服务中间件 nginx
Nginx的server块和location块的简单说明
Nginx的server块和location块的简单说明
|
12月前
|
监控 UED
记一次HttpClient使用问题分析
【9月更文挑战第19天】在软件开发中,HttpClient 常用于发送 HTTP 请求,但可能遇到请求超时等问题。本文分析了一例间歇性超时现象,从网络连接、配置、服务器响应等方面排查,并提出调整配置、优化逻辑、增加重试及监控等解决方案,最终提升系统稳定性和用户体验。
406 7
|
JavaScript 前端开发 Java
如何使用正则表达式来匹配电子邮件地址?
如何使用正则表达式来匹配电子邮件地址?
379 3
|
监控 BI 数据安全/隐私保护
ERP系统中的成本核算与管理会计解析
【7月更文挑战第25天】 ERP系统中的成本核算与管理会计解析
943 4
|
Java 关系型数据库 MySQL
如何下载远程maven仓库的jar 手动放到本地仓库?
如何下载远程maven仓库的jar 手动放到本地仓库?
2278 0