主要知识点

在es中其实是有内置的脚本支持的,可以基于groovy脚本实现各种各样的复杂操作

基于groovy脚本,如何执行partial update

es scripting module,我们会在高手进阶篇去讲解,这里就只是初步讲解一下

一、先准备数据

PUT /test_index/test_type/11

{

"num": 0,

"tags": []

}

二、使用内置脚本对数据进行更新

POST /test_index/test_type/11/_update

{

"script" : "ctx._source.num+=1"

}

结果如下:可以看到,此时num的值从0变为1。

{

"_index": "test_index",

"_type": "test_type",

"_id": "11",

"_version": 2,

"found": true,

"_source": {

"num": 1,

"tags": []

}

}

三、使用外部脚本对数据进行更新

1、先在es安装目录下的script目录下新建一个脚本文件,文件名为test-add-tags.groovy

2、在test-add-tags.groovy文件中写入 ctx._source.tags+=new_tag,然后保存退出

3、在kibana中执行以下语句:

POST /test_index/test_type/11/_update

{

"script": {

"lang": "groovy",

"file": "test-add-tags",

"params": {

"new_tag": "tag1"

}

}

}

结果如下:可以看到,tags这个数组中已加入一个数据。

四、使用用脚本删除文档

1、先在es安装目录下的script目录下新建一个脚本文件,文件名为test-delete-document.groovy

2、在test-delete-document.groovy文件中写入

ctx.op = ctx._source.num == count ? 'delete' : 'none',

然后保存退出

3、在kibana中执行以下语句:

POST /test_index/test_type/11/_update

{

"script": {

"lang": "groovy",

"file": "test-delete-document",

"params": {

"count": 1

}

}

}

执行结果如下,因为执行前num的值为1,所以符合条件,把该文档删除

执行 GET /test_index/text_type/11 结果如下:可以看到,此时是把整个文档都删除,整个文档都不存在了

五、upsert操作

1、先执行以下语句(在没有该文档的情况下进行更新)

POST /test_index/test_type/11/_update

{

"doc": {

"num": 1

}

}

结果如下:

说明,如果不存在该文档是不能执行更新操作的,使用upsert进行操作的话,如果指定的document不存在,就执行upsert中的初始化操作;如果指定的document存在,就执行doc或者script指定的partial update操作

2、在kibana中执行以下语句:

POST /test_index/test_type/11/_update

{

"script" : "ctx._source.num+=1",

"upsert": {

"num": 0,

"tags": []

}

}

结果如下:此时插入num和tags的值(初始化)

再执行一次上述语句,结果如下,此时把num加1。

24.基于groovy脚本进行partial update的更多相关文章

  1. Elasticsearch由浅入深(五)_version乐观锁、external version乐观锁、partial update、groovy脚本实现partial update

    基于_version进行乐观锁并发控制 先构造一条数据出来 PUT /test_index/test_type/ { "test_field": "test test&q ...

  2. Elasticsearch学习笔记(九)partial update

    一.什么是partial update? PUT /index/type/id,创建文档&替换文档,就是一样的语法 一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个 ...

  3. Elasticsearch技术解析与实战(七)Elasticsearch partial update

    普通的partial update 1.插入测试数据 PUT /test_index/test_type/10 { "test_field1": "test1" ...

  4. ES 26 - 通过partial update局部更新索引文档 (partial update增量修改原理)

    目录 1 什么是partial update 1.1 全量修改文档的原理 1.2 修改指定field的思路 1.3 partial update的优势 1.4 partial update的使用 2 ...

  5. 基于Groovy应用程序的spring boot

    spring boot CLI 它是使用Spring Boot的最简单的和快速的的方法.他是一个基于Groovy脚本的命令工具.可以按照以下步骤安装次工具: 1.去spring官网下载 http:// ...

  6. 基于Groovy搭建Ngrinder脚本调试环境

    介绍 最近公司搭建了一套压力测试平台,引用的是开源的项目 Ngrinder,做了二次开发,在脚本管理方面,去掉官方的SVN,引用的是Git,其他就是做了熔断处理等. 对技术一向充满热情的我,必须先来拥 ...

  7. JAVA嵌入运行Groovy脚本

    摘自: http://shift-alt-ctrl.iteye.com/blog/1938238 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...

  8. Groovy脚本基础全攻略

    1 背景 Groovy脚本基于Java且拓展了Java,所以从某种程度来说掌握Java是学习Groovy的前提,故本文适用于不熟悉Groovy却想快速得到Groovy核心基础干货的Java开发者(注意 ...

  9. 基于 Groovy 的自动化构建工具 Gradle 入门(转)

    本人工作之初没有使用自动化构建,后来敏捷了,开始使用 Ant - 完全面向过程的定义步骤,不进行依赖管理.再发展到 Maven,面向对象的方式管理工程,有了依赖的管理,JAR 包统一从中央仓库获得,保 ...

随机推荐

  1. 本地项目上传虚拟机的gitlab

    前提:在虚拟机安装了gitlab服务,并且本机可以访问到虚拟机的gitlab 自己本机项目上传到gitlab 1.先在gitlab上建立项目 拷贝项目地址: http://192.168.1.105/ ...

  2. 【转】iOS开发-关闭/收起键盘方法总结

    原文网址:http://www.cnblogs.com/GarveyCalvin/p/4167759.html 前言:作为IOS开发人员,需要经常和表单打交道.因此我对收起键盘的方法作了下总结,IOS ...

  3. Java中jspf文件的作用

    转自:https://blog.csdn.net/xzmeasy/article/details/75103431 为什么要用jspf文件 写jsp页面时,是不是:css和js引用特别多,而且有些页面 ...

  4. myeclipse视图布局恢复

    使用Windows 菜单下的 Reset Perspective

  5. Dirichlet's Theorem on Arithmetic Progressions

    http://poj.org/problem?id=3006 #include<stdio.h> #include<math.h> int is_prime(int n) { ...

  6. POJ 1111(数字很吉利嘛) 简单BFS

    Image Perimeters Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8594 Accepted: 5145 Desc ...

  7. ScreenRecord(about C# winform)

    由于一些不得不做的事(哈,有时间再聊),所以就不得不写一个关于录屏的软件了,如此无力的开篇,开始吧. 在网上搜了很多关于录屏的源码,发现都使不了,剧情的需要很难满足.于是突然想到了github上的一个 ...

  8. 【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(一 、上传图片)

    前段时间在做一个微信的项目,遇到了一个上传图片的问题,花了一下午,解决了这个问题,然后把总结出来的代码,分享了出来. 最近又有一个图片+语音的功能, 更是蛋疼, 本次采用的不是File文件上传,然后转 ...

  9. Android Fragment与Activity交互的几种方式

    这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等. 首先我们来介绍使用Handler来实现Fragment与Activity 的交互. ...

  10. angular js 球星

    <!DOCTYPE html>   <html lang="en">   <head>   <meta charset="UTF ...