主要知识点

在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. springmvc 处理lsit类型的请求參数映射成实体属性

    <table align="center" cellspacing="10"> <tr> <td> 母码数目:<inp ...

  2. NSThread/NSOperation/GCD 三种多线程技术

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  3. 如何更改iTunes备份地址(修改iphone ipad 备份地址) itunes文件目录修改方法 【亲测有效,附带原理说明】

    前言 C盘空间有限,但是iTunes就是那么龌龊,只能把手机备份存到C盘.那么怎么才能把备份文件存到其他分区的文件夹里面呢? 当时我想先看看度娘,看看有没有现成的! 结果 nnd!! 我看了一大堆相关 ...

  4. Codeforces--630B--Moore's Law(快速幂)

     Moore's Law Time Limit: 500MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit ...

  5. openStack enscaption

  6. html5 拖放事件

    1.设置元素可拖拽属性:draggable true表示可拖拽. false表示不可拖拽. auto默认值,img和带href属性的a标签则表示可拖拽,其他标签表示不可被拖拽. 其他值表示不可拖拽. ...

  7. MAC软连接

    在mac上不设置环境变量有的时候也可以直接就访问到了某些文件.这个是为什么呢?答案是用了软连接. 1 查看加载文件 可以使用cat命令查看paths文件 cat etc/paths /usr/loca ...

  8. 利用 html+css 画同心圆(concentric circles)——绝对布局与相对布局

    一.css 绘制圆 #circle { width: 300px; height: 300px; background-color: #000000; border-radius: 300px; } ...

  9. shiro登陆权限验证

    一>引入shirojar包 <!-- shiro登陆权限控制 -->        <dependency>            <groupId>org. ...

  10. 控制台输入年龄,根据年龄输出不同的提示 ------if……else if ……else 语句

    package com.zuoye.test; import java.util.Scanner; public class Nianling { public static void main(St ...