es之对文档进行更新操作
5.7.1:更新整个文档
ES中并不存在所谓的更新操作,而是用新文档替换旧文档;
在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档并建立索引。旧版本文档不会立即消失
,但你也不能去访问它
PUT /website/blog/123
{
"title": "My first blog entry2",
"text": "I am starting to get the hang of this...",
"date": "2014/01/02"
}
5.7.2:局部更新[partial _update]
上面介绍的是更新整个文档,但是往往会出现这种情况,文档非常大,但是只想更新其中的一个数据,这个时候通过检索,修改,然后重建整文档的索引方法来更新文档就不合适了,所以需要使用局部的更新;
但是仍然需要注意的是,无论是整个文档更新还是局部的更新,都是先找到旧的,然后标记删除,然后在添加新的文档
所以这个过程大概是这样:
1. 从旧文档中检索JSON
2. 修改它
3. 删除旧文档
4. 索引新文档
POST /website/blog/123/_update
{
"doc" : {
"tags" : [ "testing" ],
"views": 0
}
}
注意,在局部更新中,要使用POST + _update
5.7.3:使用脚本进行局部更新[Groovy]
这时候当API不能满足要求时,Elasticsearch允许你使用脚本实现自己的逻辑。脚本支持非常多的API,例如搜索、排序、聚合和文档更新。
默认的脚本语言是Groovy,一个快速且功能丰富的脚本语言,语法类似于Javascript。它在一个沙盒(sandbox)中运行,以防止恶意用户毁坏Elasticsearch或攻击服务器
脚本能够使用update API改变source字段的内容,它在脚本内部以ctx.source表示。
例如,我们可以使用脚本增加博客的views数量:
POST /website/blog/123/_update
{
"script" : "ctx._source.views+=1"
}
5.7.4:更新可能不存的文档
在局部更新操作中,如果遇到了不存在的文档,会出现失败的操作;
有时候也需要对不存在的文档进行更新【创建】
POST /website/blog/1/_update
{
"script" : "ctx._source.views+=1"
}
报错: "type": "document_missing_exception" 因为当前并不存在这个文档
使用关键字:upsert 当文档不存在的时候,那么就创建这个文档
POST /website/blog/1/_update
{
"script" : "ctx._source.views+=1",
"upsert": {
"views": 2
}
}
在局部更新中,使用upsert脚本:
| 当文档不存在的时候,会走upsert语句 |
|---|
| 当文档已经存在的时候,会走script语句 |
es之对文档进行更新操作的更多相关文章
- MongoDB 文档的更新操作
在MongoDB中,更新单个doc的操作是原子性的.默认情况下,如果一个update操作更新多个doc,那么对每个doc的更新是原子性的,但是对整个update 操作而言,不是原子性的,可能存在前面的 ...
- ES-PHP向ES批量添加文档报No alive nodes found in your cluster
ES-PHP向ES批量添加文档报No alive nodes found in your cluster 2016年12月14日 12:31:40 阅读数:2668 参考文章phpcurl 请求Chu ...
- 【三】MongoDB文档的CURD操作
一.插入文档 使用insert方法插入文档到一个集合中,如果集合不存在创建集合,有以下几种方法: db.collection.insertOne({}):(v3.2 new) #插入一个文档到集合中 ...
- shift+alt 可对notepadplusplus 打开的文档进行列操作
shift+alt 可对notepadplusplus 打开的文档进行列操作
- 4: ES内执行Groovy脚本,做文档部分更新、执行判断改变操作类型
ES有内置的Groovy脚本执行内核,可以在命令的Json内嵌入Groovy脚本语句 前提数据:
- Elasticsearch技术解析与实战(二)文档的CRUD操作
启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...
- ElasticStack学习(四):ElasticSearch文档使用与操作
一.文档的CRUD介绍 ElasticSearch中存在五种操作,分别如下: 1.Index 该操作表示:如果文档的ID不存在,则创建新的文档.若有相同的ID,先删除现有文档,然后再创建新的文档,同时 ...
- MongoDB 教程(七):插入文档、更新文档、删除文档
MongoDB 插入文档 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式 —— BSON是一种类json的二进制形式的存储格式,简称Binary JSON. MongoDB ...
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...
随机推荐
- Spring(六)--Spring配置文件之间的关系
Spring配置文件之间的关系 1.需要的实体类 2.需要的xml文件 3.测试类 未完待续!!!
- [codeforces#592Div2]C-G题
题目链接 感觉这场难度迷茫,个人觉得难度排序为$A<B<D=E=G<C<F$ C题: 比赛结束1500+pp,结果出分900+fst,我就是fst的睿智Orz. 题意为给出$n ...
- 初步学习jquery学习笔记(六)
jquery学习笔记六 AJAX 简介 AJAX 是与服务器交换数据的技术,它在不重载全部页面的情况下,实现了对部分网页的更新. load() 方法 load() 方法从服务器加载数据,并把返回的数据 ...
- python中的元类介绍
类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段,在python中也是成立的. class ObjectCreator: pass my_object = ObjectCre ...
- 同一路由带参刷新,以及params和query两种方式传参的异同
同一路由应该不叫跳转了吧,就先叫刷新好了. 需求及问题 今天做web课设有这样一个需求: 在导航栏中一项叫做教师队伍一级菜单下,有三个二级菜单,分别为教授.副教授.讲师.这三个二级菜单分别对应一个页面 ...
- 使用Jenkins结合Gogs和SonarQube对项目代码进行测试、部署、回滚,以及使用keepalived+haproxy调度至后端tomcat
0 环境说明 主tomcat:192.168.0.112 备tomcat:192.168.0.183 haproxy+keepalived-1:192.168.0.156 haproxy+keepal ...
- C++ 调用C语言、extern "C"、__cplusplus关键字
——C++编译器完全兼容C语言的编译方式.(但是得有源代码) ——C++编译器会优先使用C++的编译方式进行编译 ——extern "C" 关键字能够强制C++编译器进行C方式的编 ...
- C语言IOCP
C语言的IOCP example #include <winsock2.h> #include <ws2tcpip.h> #include <mswsock.h> ...
- JavaScript concat() 方法
昨天接触了一个项目,我的tbody变量是一个数组,然后数据返回的是数组里面包含对象,我刚开始没看懂这个concat的作用,然后百度一下javascript中的用法,以此记录concat的方法: dat ...
- css3 加载动画
代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...