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 ...
随机推荐
- 微信小程序 报错 “对应的服务器无效。控制台输入 showRequestInfo()可以获取更详细信息”
之前做的项目突然无法读出数据了,一测试发现报这个错误==>对应的服务器无效.控制台输入 showRequestInfo()可以获取更详细信息,后来发现是SSL证书到期了.重新申请了一个证书,免费 ...
- unittest中的testCase执行顺序
1.方法顺序 def setUp(self): 在测试方法前执行 def tearDown(self): 在测试方法后执行 class TestMethod(unittest.TestCase): # ...
- [转载]Ubuntu环境下检查CPU 的温度
原文地址:https://www.linuxprobe.com/ubuntu-cpu-temperature.html 我们将使用一个GUI工具Psensor,它允许你在Linux中监控硬件温度.用P ...
- 曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- mpvue开发微信小程序之picker
微信使用picker组件,bingchange 换成@change即可使用监听函数和方法 此处注意与微信多了一个mp的信息才能获取到选中的值. 获取当前日期+时间 function formatTim ...
- python实现观察者模式
python实现观察者模式 前言 有时,我们希望在一个对象的状态改变时更新另外一组对象.在MVC模式中有这样一个非 常常见的例子,假设在两个视图(例如,一个饼图和一个电子表格)中使用同一个模型的数据, ...
- String,StringBuilder和StringBuffer
String 字符串常量,由String创建的字符内容,长度是不可改变,存放字符的数组被声明为final. 实际上String类操作字符串是通过建立一个StringBuffer,然后调用append( ...
- 将shell脚本的执行过程和执行结果导入到log文件中
[root@localhost scripts]# vim ping.sh #!/bin/bash set -x ##分步执行 exec &> /tmp/log.txt ##脚本执行的过 ...
- mongoose 开源http库(2) --HTTP服务示例
要创建HTTP服务器,请按照以下格式: 通过调用mg_bind()或mg_bind_opt()创建侦听连接 调用mg_set_protocol_http_websocket()创建listening连 ...
- matlab 中figure的图像 抗锯齿
linehandle = plot(xxxxxx); set( linehandle, 'linesmoothing', 'on' );