ES中put和post指令的区别

本文是在kibana提供的Devtool工具中测试

POST即能新增数据也能更新数据

笔者做了如下两组对比实验测试代码:

POST product_db/_doc
{
    
    
  "id": "888",
  "brandId": 777,
  "brandName": "vivo",
  "name": "vivo X6 pro",
  "price": "1999",
  "attrs": [
      {
    
    
          "attrId" : 1,
          "attrName" : "cpu",
          "attrValue" : "4核"
      },
      {
    
    
          "attrId" : 2,
          "attrName" : "颜色",
          "attrValue" : "白色"
      }
  ]
}

POST product_db/_doc/wzNfGnsBr_UJkvYDQFWh
{
    
    
  "id": "888",
  "brandId": 777,
  "brandName": "vivo",
  "name": "vivo X6 pro",
  "price": "1999",
  "attrs": [
      {
    
    
          "attrId" : 1,
          "attrName" : "cpu",
          "attrValue" : "4核"
      },
      {
    
    
          "attrId" : 2,
          "attrName" : "颜色",
          "attrValue" : "白色"
      }
  ]
}

执行上述两组指令,第一组未加文档id表明是新增,并返回了新增id,如下:

{
    
    
  "_index" : "product_db",
  "_type" : "_doc",
  "_id" : "wzNfGnsBr_UJkvYDQFWh",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    
    
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 20,
  "_primary_term" : 2
}

第二组加上了文档id则执行成功,结果如下:

{
    
    
  "_index" : "product_db",
  "_type" : "_doc",
  "_id" : "wzNfGnsBr_UJkvYDQFWh",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    
    
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 21,
  "_primary_term" : 2
}

由此可证明,POST即能新增数据也能更新数据

PUT只能更新数据不能新增数据

笔者同样做了如下两组对比实验测试代码:

PUT product_db/_doc
{
    
    
  "id": "888",
  "brandId": 777,
  "brandName": "vivo",
  "name": "vivo X6 pro",
  "price": "1999",
  "attrs": [
      {
    
    
          "attrId" : 1,
          "attrName" : "cpu",
          "attrValue" : "4核"
      },
      {
    
    
          "attrId" : 2,
          "attrName" : "颜色",
          "attrValue" : "白色"
      }
  ]
}

PUT product_db/_doc/wTNNGnsBr_UJkvYDplXb
{
    
    
  "id": "888",
  "brandId": 777,
  "brandName": "vivo",
  "name": "vivo X6 pro",
  "price": "1999",
  "attrs": [
      {
    
    
          "attrId" : 1,
          "attrName" : "cpu",
          "attrValue" : "4核"
      },
      {
    
    
          "attrId" : 2,
          "attrName" : "颜色",
          "attrValue" : "白色"
      }
  ]
}

执行上述两组指令,第一组未加文档id的执行失败,如下:

{
    
    
  "error" : "Incorrect HTTP method for uri [/product_db/_doc?pretty=true] and method [PUT], allowed: [POST]",
  "status" : 405
}

第二组加上了文档id则执行成功,结果如下:

{
    
    
  "_index" : "product_db",
  "_type" : "_doc",
  "_id" : "wTNNGnsBr_UJkvYDplXb",
  "_version" : 4,
  "result" : "updated",
  "_shards" : {
    
    
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 19,
  "_primary_term" : 2
}

由上述结果再对比POST指令实验组可证明,put只能更新数据无法新增数据

猜你喜欢

转载自blog.csdn.net/qq_42697271/article/details/119455896