本文介绍ES文档数据的修改。
文档的修改
ES索引类型的文档数据修改分为两种方式:直接修改文档和脚本修改文档。
前一篇文章的示例,我们插入了两个文档:
我们在此基础上演示如何修改这两个文档。
(本文出自oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/1795682)
直接修改文档
打开postman,使用post协议,请求http://localhost:9200/rent/community/1/_update
这里注意请求路径中除了包含rent索引、community类型、以及需要修改的文档的id=1外,还需要加一个关键词_update,表明我们请求调用的是ES文档更新操作。
然后我们把需要修改的内容以json的格式写在body下,格式为raw的json格式。
比如我这里讲id为1的那条文档的属性小区名称从汤城一品改成汤城二品。
注意这里的关键词doc,这是直接修改方式与另一种脚本修改方式的区别所在,记住了啊。
{
"doc":{
"communityname":"汤城二品"
}
}
我们提交请求:、
我们可以看到提示_id为1的文档的_version版本号从1变为2了。另外,操作结构类型是update更新。
由于我们副本为1个,所以更新文档影响的文档数总共有两个,请看total和sucessful,都为2.
{
"_index": "rent",
"_type": "community",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}
我们这里强调一下几个地方,用红色标志:
然后我们回到head页面,刷新。
脚本修改文档
上面的直接修改方式,是借助于doc关键字。
ES还支持一种使用脚本语言的修改方式,其请求方式相同,但请求体内的json关键字用的是scrpit。
ES支持多种脚本语言,偶painless,它是ES内置的脚本语言。同时,ES还支持groovy,javascript,python等脚本语言。
本文选用painless内置脚本语言。
写脚本的内容需要用关键字inline这个属性,在inline属性中写明脚本内容。
ctx代表ES上下文context;
关键词_source代表ES当前的文档。
我们这里讲房龄age属性加个10年,写法是ctx._source.age+=10。
{
"script":{
"lang":"painless",
"inline":"ctx._source.age+=10"
}
}
提交返回结果:
{
"_index": "rent",
"_type": "community",
"_id": "1",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}
这里注意标红的地方:
我们跑到head页面去看看age是否变了:
我们这里还可以将修改属性放到一个参数体里面。比如,还是post请求刚才的http://localhost:9200/rent/community/1/_update
{
"script":{
"lang":"painless",
"inline":"ctx._source.age=params.age",
"params":{
"age":100
}
}
}
请求成功,版本更新:
{
"_index": "rent",
"_type": "community",
"_id": "1",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}
再看看head插件页面: