在弹性搜索中添加文档时的PUT与POST

时间:2019-06-26 06:43:50

标签: elasticsearch

我是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"]
}
"

vs

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"]
}
"

2 个答案:

答案 0 :(得分:2)

  • POST:用于实现ID的自动生成。
  • PUT:在您要指定ID时使用。

请参阅this

答案 1 :(得分:0)

它们都是HTTP的安全方法之一。

通常,我们使用POST创建资源,然后使用PUT进行修改。除了可以自由设置服务器端之外,还可以同时使用它们,因为它们具有类似的属性,例如:它们都具有主体,它们是安全的,数据未显示在URL中,以及...。 尽管最好考虑一下我之前说过的标准规则: 通常我们使用POST创建资源,然后使用PUT修改资源。这样,您的代码更具可读性,可变性...

要更深入,您可以根据put-versus-post考虑​​以下技巧:

在POST和PUT之间进行选择很容易:仅当端点遵循以下2条规则时,才使用PUT:

  1. 端点必须是幂等的:可以安全地一遍又一遍地重做请求;
  2. URI必须是要更新的资源的地址。

使用PUT时,是说我们希望将请求中发送的资源存储在给定的URI中。我们是从字面上“投放”该地址的资源。