本文是在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只能更新数据无法新增数据