Elasticsearch之CURL命令的PUT和POST對比


 

 

 

  PUT是冪等方法,而POST並不是。

  PUT用於更新操作,POST用於新增操作比較合適。

  PUT,DELETE操作是冪等的,所謂冪等就是指不管進行多少次操作,結果都一樣。

        比如,我用PUT修改一篇文章,然后在做同樣的操作,每次操作后的結果並沒有不同,DELETE也是一樣。

 

 

  POST操作不是冪等,比如常見的POST重復加載問題:當我們多次發出同樣的POST請求后,其結果是創建出了若干的資源。

  還有一點需要注意的是,創建操作可以使用POST,也可以使用PUT。區別在於POST是作用在一個集合資源之上的(/articles),而PUT操作是作用在一個具體資源之上的(/articles/123),比如說很多資源使用數據庫自增主鍵作為標識信息,而創建的資源的標識信息到底是什么只能由服務端提供,這個時候就必須使用POST。

 

 

 

 

 

[hadoop@master elasticsearch-2.4.0]$ curl -XPOST http://master:9200/zhouls/user/1 -d '{"name" : "john"  , "age" : 28}'
{"_index":"zhouls","_type":"user","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ 
[hadoop@master elasticsearch-2.4.0]$ 
  
  zhouls是索引,user是類型,1是id
[hadoop@master elasticsearch
-2.4.0]$ curl -XPOST http://master:9200/zhouls/user -d '{"name" : "john"}' {"_index":"zhouls","_type":"user","_id":"AVz5Q9u7U8bDb6QDgbDS","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$
  zhouls是索引,user是類型
  由此,可見,如果,我們不指定id,則會自動隨機生成


  POST方式是自增id,PUT是必須要跟上id。

[hadoop@master elasticsearch
-2.4.0]$ curl -XPUT http://master:9200/zhouls/user/2?op_type=create -d '{"name" : "john" , "age" : 28}' {"_index":"zhouls","_type":"user","_id":"2","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$
  zhouls是索引,user是類型,2是id,
  ?op_type=create是


[hadoop@master elasticsearch-2.4.0]$ curl -XPUT http://master:9200/zhouls/user/2/_create -d '{"name" : "john"  , "age" : 28}'
{"error":{"root_cause":[{"type":"document_already_exists_exception","reason":"[user][2]: document already exists","index":"zhouls","shard":"2"}],"type":"document_already_exists_exception","reason":"[user][2]: document already exists","index":"zhouls","shard":"2"},"status":409}[hadoop@master elasticsearch-2.4.0]$ 
[hadoop@master elasticsearch-2.4.0]$ 
 zhouls是索引,user是類型,2是id,
  _create是


  由此,可見,PUT是不允許,已經創建過的id,再來創建。


[hadoop@master elasticsearch
-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ curl -XPUT http://master:9200/zhouls/user/3/_create -d '{"name" : "john" , "age" : 28}' {"_index":"zhouls","_type":"user","_id":"3","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM