ES中put和post指令的区别
本文是在kibana提供的Devtool工具中测试目录POST即能新增数据也能更新数据PUT只能更新数据不能新增数据POST即能新增数据也能更新数据笔者做了如下两组对比实验测试代码:POST product_db/_doc{"id": "888","brandId": 777,"brandName": "vivo","name": "vivo X6 pro","price": "1999","at
·
本文是在kibana提供的Devtool工具中测试
1、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即能新增数据也能更新数据
2、PUT也可以新增数据和更新数据
笔者同样做了如下两组对比实验测试代码:
PUT product_db/_doc/wTNNGnsBr_UJkvYDplXb/_create
{
"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" : "白色"
}
]
}
执行上述两组指令,第一组添加了/_create,结果如下:
{
"_index" : "product_db",
"_type" : "_doc",
"_id" : "eTNNGn_sBYDplXb",
"_version" : 5,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 18,
"_primary_term" : 2
}
第二组去除了尾部的/_create,同样执行成功,结果如下:
{
"_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
}
由上述结果可证明put同样有新增和更新的功能
3、结论
共同点:
- ES中的put和post同样都具备创建和更新的功能;
不同点:
- put需要精确到某一个资源文件,这样才能进行对数据的更新和创建操作;
- post能对整个资源集合进行操作,如果没有指定具体修改的文件id,那么post指令会自动生成一个唯一的id进行文件的创建,并将数据写入该文件中。如果指定了文件id,那么就会根据填写的参数对数据进行创建和更新操作;
更多推荐
所有评论(0)