ElasticSearch笔记系列(6)——文档之修改的两种方式

原创
2018/04/14 22:54
阅读数 4K

本文介绍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插件页面:

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
2
分享
返回顶部
顶部