在ElasticSearch中添加文档时的PUT与POST

vfh0ocws  于 2022-12-11  发布在  ElasticSearch
关注(0)|答案(3)|浏览(311)

我是Elasticsearch的新手,尝试在弹性索引中添加文档。我在PUT和POST之间感到困惑,因为两者在下面的场景中产生相同的结果:

curl -H "Content-Type: application/json" -XPUT "localhost:9200/products/mobiles/1?pretty" -d"
{
"name": "iPhone 7",
"camera": "12MP",
"storage": "256GB",
"display": "4.7inch",
"battery": "1,960mAh",
"reviews": ["Incredibly happy after having used it for one week", "Best iPhone so far", "Very expensive, stick to Android"]
}
"

对比

curl -H "Content-Type: application/json" -XPOST "localhost:9200/products/mobiles/1?pretty" -d"
{
"name": "iPhone 7",
"camera": "12MP",
"storage": "256GB",
"display": "4.7inch",
"battery": "1,960mAh",
"reviews": ["Incredibly happy after having used it for one week", "Best iPhone so far", "Very expensive, stick to Android"]
}
"
czq61nw1

czq61nw11#

  • POST:用于实现id的自动生成。
  • PUT:当你想指定一个id时使用。

请参阅this

jk9hmnmh

jk9hmnmh2#

它们都属于HTTP的安全方法。
通常我们使用POST来创建一个资源,而使用PUT来修改它。此外,如果您可以自由地设置服务器端,您可以同时使用它们,因为它们都具有类似的属性,如:它们都有正文,它们是安全,数据不显示在URL中,而且....尽管最好考虑标准规则,我以前说过其中一条:通常我们用POST来创建一个资源,用PUT来修改它。2这样你的代码就更易读,更易修改...
为了更深入地了解,您可以根据put-versus-post考虑以下提示:
在POST和PUT之间做出选择很容易:当且仅当端点将遵循以下两条规则时,才使用PUT:
1.端点必须是幂等的:一遍又一遍地重复请求是安全的;

  1. URI必须是正在更新的资源的地址。
    当我们使用PUT时,我们是说,我们希望在请求中发送的资源存储在给定的URI中,我们实际上是在这个地址“放置”资源。
7eumitmz

7eumitmz3#

POST和PUT之间的唯一区别是不能使用PUT创建具有自动ID生成功能的文档。
以下查询将创建一个文档并自动生成一个ID:

POST /products/_doc
{
  "name": "Shoes",
  "price":  100,
  "in_stock": 64
}

尝试同样的PUT结果为“HTTP方法不正确”。

PUT /products/_doc
{
  "name": "Shoes",
  "price":  100,
  "in_stock": 64
}

除非我不够努力,否则这是POST和PUT在创建文档时的唯一区别。除此之外,POST和PUT将让您实现相同的功能。

相关问题