Elasticsearch学习笔记(九)partial update
一、什么是partial
update?
PUT
/index/type/id,创建文档&替换文档,就是一样的语法一般对应到应用程序中,每次的执行流程基本是这样的:(1)应用程序先发起一个get请求,获取到document,展示到前台界面,供用户查看和修改(2)用户在前台界面修改数据,发送到后台(3)后台代码,会将用户修改的数据在内存中进行执行,然后封装好修改后的全量数据(4)然后发送PUT请求,到es中,进行全量替换(5)es将老的document标记为deleted,然后重新创建一个新的documentpartial updatePOST
/index/type/id/_update{"doc":
{"要修改的少数几个field即可,不需要全量的数据"}}PUT
/test_index/test_type/10{"test_field1":
"test1","test_field2":
"test2"}POST
/test_index/test_type/10/_update{"doc":
{"test_field2":
"updated test2"}}看起来,好像就比较方便了,每次就传递少数几个发生修改的field即可,不需要将全量的document数据发送过去
二、partial
update实现原理以及其优点
update直接将数据更新到document中就完成了修改,不用事先先发起一个GET请求数据进行修改然后在将修改后的数据发回去。
/test_index/test_type/id/_update?retry_on_conflict=2
{"doc":
{"num":32}}如果更新失败,则获取最新的版本号再次进行更新,最多重试retry_on_conflict指定的次数
/test_index/test_type/11/_update?version=3
{"doc":
{"num":32}}
三、基于groovy脚本的partial
update
1、内置脚本
/test_index/test_type/11
{"num":0,"tags":[]}
POST
/test_index/test_type/11/_update{"script":
"ctx._source.num+=8"}
2、外部脚本
(1)添加脚本
test_update_num.groovy
POST
/test_index/test_type/11/_update{"script":
{"lang":
"groovy","file":
"test_update_num"}}
(
2)添加脚本:test-add-tags.groovy
/test_index/test_type/11/_update
{"script":
{"lang":
"groovy","file":
"test-add-tags","params":
{"new_tag":"tag_value"}}}
(
3)添加脚本:test-delete-document.groovy
POST
/test_index/test_type/11/_update{"script":
{"lang":
"groovy","file":
"test-delete-document","params":
{"count":17}}}
(4)upsert操作
update操作
POST
/test_index/test_type/11/_update{"script" :
"ctx._source.num+=1","upsert":
{"num":
0,"tags":
[]}}
Elasticsearch学习笔记(九)partial update的更多相关文章
- Elasticsearch学习笔记一
Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- elasticsearch学习笔记——相关插件和使用场景
logstash-input-jdbc学习 ES(elasticsearch缩写)的一大优点就是开源,插件众多.所以扩展起来非常的方便,这也造成了它的生态系统越来越强大.这种开源分享的思想真是与天朝格 ...
- MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九
<Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次 SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...
- ElasticSearch学习笔记(超详细)
文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...
- Python学习笔记九
Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...
随机推荐
- Hibernate查询返回自定义VO的两种方式
说明:createQuery用的hql语句进行查询,createSQLQuery用sql语句查询: 前者以hibernate生成的Bean为对象装入list返回:后者则是以对象数组进行存储: 一.通过 ...
- es2015 解构赋值
解构赋值语法是一个 Javascript 表达式,这使得可以将值从数组或属性从对象提取到不同的变量中.
- C# 微信开发-----微信会员卡(三)激活会员卡
在会员领取了会员卡之后需要做 一个跳转性激活,模式请看下图: 在创建会员卡的时候需要配置下这个参数的值: memberActivate.aspx页面代码如下: <%@ Page Language ...
- Python-Django基础
django目录 -settings -urls -views ******强调:setting中'django.middleware.csrf.CsrfViewMiddleware'中间件先注释掉 ...
- Xcode注释快捷键和Alfred 快捷键冲突解决方案
在Alfred 中的Features -> File Search ->Navigation ->Previous Path 中的快捷方式改掉就可以了
- 强大的IDEA开发工具
开发工具切换IDEA 一:首先安装好IDEA工具并且配置maven信息 打开-File-Settings 新建maven WEB项目 打开-File-New-Project 点击NEXT 点击NEXT ...
- 金蝶K/3 BOS产品培训教案
K/3 BOS产品培训教案 1 K/3 BOS IDE练习案例... 2 1.1新建基础资料... 2 1.1.1新增基础资料交货地点... 2 1.2新建业务单据... 2 1.2.1新建寄 ...
- hihocoder 1496 寻找最大值
题解: 注意到$ai$只有$1e6$这件事情肯定要枚举和这个有关的东西 考虑枚举$ai\&aj$的值就可以了 那么这个集合一定是ai,aj的子集 于是我们对每个集合从大到小枚举丢掉一位转移就行 ...
- WEB测试重点
1.功能测试:所实现的功能是否和需求一致:2.界面测试:界面是否美观,风格是否一致,文字内容是否正确:3.链接测试:打开链接速度是否合理:是否链接到正确的页面:是否有空白页面:4.性能测试:系统能支持 ...
- Linux内核原理与分析-第二周作业
写之前回看了一遍秒速五厘米:如果