1.什么是partial update?
我们都知道如果要修改一条document,有两种方法,一种就是全量替换,直接对document重新建立索引,替换里面所有的内容。另一种就是partial update,要修改少数几个field即可,不需要全量替换数据。
全量替换语法:
PUT index/type/id //创建文档&替换文档都是一样的语法
{
"filed":"test" //会进行全量替换数据
}
全量替换修改document,一般对应的应用程序中,一般流程是这样的:
1.应用程序先发起一个get请求,获取到document,显示到页面,供用户查询和修改。
2.用户在前台界面修改数据,发送到后台程序
3.后台代码会将用户修改的数据,在内存中进行执行,然后封装好修改后的全量数据
4.然后发送put请求进行全量替换
5.es将老的document标记为deleted,然后重新创建新的document。
partital update语法:
POST index/type/id/_update
{
"doc":{
"field1":"test1", //要修改少数几个field即可,不需要全量替换数据
"field2""test2"
}
}
这样就比较方便了,每次只要传递几个少数要修改的field即可,不需要将全量的document发送过去。
图解partital update 以及优点
3.上机动手实战partital update
(1)先构造一条数据
PUT test_index/test_type/6
{
"test_field1":"test1",
"test_field2":"test2"
}
运行结果:
{
"_index": "test_index",
"_type": "test_type",
"_id": "6",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 2
}
(2)用partital update更新数据
POST test_index/test_type/6/_update
{
"doc": {
"test_field2":"test123"
}
}
运行结果:
{
"_index": "test_index",
"_type": "test_type",
"_id": "6",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 8,
"_primary_term": 2
}