ElasticSearch Script 操作数据最详细介绍

news2024/11/28 10:56:20

文章目录

    • ElasticSearch Script基础介绍
    • 基础用法
      • List类型数据新增、删除
      • nested数据新增、删除
      • 根据指定条件修改数据
      • 根据指定条件修改多个字段数据-查询条件也使用脚本
      • 根据指定条件删除nested中子数据
        • 数据
        • 根据条件删除数据
        • 删除之后结果
    • 创建脚本,通过脚本调用
      • 根据条件查询出数据,删除nested子对象数据

ElasticSearch Script基础介绍

语法

"script": {
    "lang":   "...",  
    "source" | "id": "...", 
    "params": { ... } 
  }

参数说明:

字段说明
lang脚本使用的语言,默认是painless
source脚本的核心部分,id应用于:stored script
params传递给脚本使用的变量参数

Script有许多场景使用,比如update、update-by-query、reindex等,结合scripts语法说,lang会有painless、expression、mustache等选择;source中有ctx、doc[‘field_name’]、_source等方式取值。

在这里插入图片描述

基础用法

List类型数据新增、删除

添加数据到List

PUT test/_doc/1
    {
        "counter" : 1,
        "tags" : ["red"]
    }

使用Script添加数据到List

 POST test/_update/1
    {
        "script" : {
            "source": "ctx._source.tags.add(params.tag)",
            "lang": "painless",
            "params" : {
                "tag" : "blue"
            }
        }
    }

使用Script删除List数据

    POST test/_update/1
    {
      "script": {
        "source": "if (ctx._source.tags.contains(params.tag)) { ctx._source.tags.remove(ctx._source.tags.indexOf(params.tag)) }",
        "lang": "painless",
        "params": {
          "tag": "blue"
        }
      }
    }

nested数据新增、删除

新增nested类型数据

POST group/_update/50Bh5H8BmwYplCYFGcvg
{
    "script" : {
        "source": "ctx._source.user.add(params.user)",
        "lang": "painless",
        "params": {
          "user": 	{
			      "userId":"3005",
			      "userName":"小卡",
			      "content":"不返回具体数据。"
		    }
      }
    }
}

删除nested类型数据

POST group/_update_by_query
{
    "script" : {
        "source": "ctx._source.user.removeIf(item -> item.userId == params.userId)",
    "lang": "painless",
    "params": {
      "userId": "3003"
    }
    },
 "query": {
    "term": {
      "user.content.keyword": {
        "value": "不返回具体数据。"
      }
    }
  }
}

根据指定条件修改数据

SQL含义:

update operator_ip_segment_index set owned_network = '广电网' where owned_network.keyword = '新疆伊犁哈萨克自治州';

DSL语法:

curl -XPOST http://8.9.60.9:9200/operator_ip_segment_index/_update_by_query -H 'Content-Type: application/json' -d'
{
    "script":{
        "source":"ctx._source.owned_network = params.owned_network",
        "params":{
            "owned_network":"广电网"
        },
        "lang":"painless"
    },
    "query":{
        "term":{
            "owned_network.keyword":"新疆伊犁哈萨克自治州"
        }
    }
}
'

根据指定条件修改多个字段数据-查询条件也使用脚本

POST operator_ip_segment_index/_update_by_query
{
    "script":{
        "source":"""
        ctx._source['ip_type_code']=null;
        ctx._source['start_ipv4_num']=null;
        """
    },
    "query": {
    "bool": {
      "should": {
        "script": {
          "script": {
            "source": """
            long times = System.currentTimeMillis()/1000 - 60 * 60 * 24;
            doc['update_time_seconds'].value <= times
            """
            , "lang": "painless"
          }
        }
      }
    }
  }
}

根据指定条件删除nested中子数据

数据

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.8025915,
    "hits" : [
      {
        "_index" : "group",
        "_type" : "_doc",
        "_id" : "ri8VboYBHSuebtDIpIft",
        "_score" : 0.8025915,
        "_source" : {
          "groupName" : "聊天2群",
          "groupId" : "1002",
          "user" : [
            {
              "userName" : "小王2",
              "userId" : "3002",
              "content" : "2作为一级筛选条件单独使用表示,表示只返回聚合结果,不返回具体数据。"
            },
            {
              "userName" : "小张2",
              "userId" : "3003",
              "content" : "2作为一级筛选条件单独使用表示,表示只返回聚合结果,不返回具体数据。"
            },
            {
              "userName" : "小卡",
              "userId" : "说啥呢",
              "content" : "不返回具体数据。"
            }
          ]
        }
      }
    ]
  }
}

根据条件删除数据

查询user.content.keyword = 不返回具体数据。的数据,并删除,nesteduserId=3003的子数据


POST group/_update_by_query
{
    "script" : {
        "source": "ctx._source.user.removeIf(item -> item.userId == params.userId)",
    "lang": "painless",
    "params": {
      "userId": "3003"
    }
    },
 "query": {
    "term": {
      "user.content.keyword": {
        "value": "不返回具体数据。"
      }
    }
  }
}

删除之后结果

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.8025915,
    "hits" : [
      {
        "_index" : "group",
        "_type" : "_doc",
        "_id" : "ri8VboYBHSuebtDIpIft",
        "_score" : 0.8025915,
        "_source" : {
          "groupName" : "聊天2群",
          "groupId" : "1002",
          "user" : [
            {
              "userName" : "小王2",
              "userId" : "3002",
              "content" : "2作为一级筛选条件单独使用表示,表示只返回聚合结果,不返回具体数据。"
            },
            {
              "userName" : "小卡",
              "userId" : "说啥呢",
              "content" : "不返回具体数据。"
            }
          ]
        }
      }
    ]
  }
}

创建脚本,通过脚本调用

根据条件查询出数据,删除nested子对象数据

创建删除脚本,id为delete-nested-test

POST _scripts/delete-nested-test
{
    "script":{
        "lang":"painless",
        "source":"ctx._source.user.removeIf(item -> item.userId == params.userId)"
    }
}

使用delete-nested-test脚本,删除nested,user.userId等于888的子对象数据

POST group/_update_by_query
{
  "script": {
    "id":"delete-nested-test",
    "params":{
      "userId":"888"
    }
  },
  "query": {
    "term": {
      "user.content.keyword": {
        "value": "不返回具体数据。"
      }
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.net7窗口编程c#2022实战(1)-zip压缩精灵(1)

目录 创建ZIP精灵项目拖控件OpenFileDialog 类压缩与解压缩编写我们自己的代码其它参考内容创建ZIP精灵项目 VS2022中新建项目。 为窗体取一个标题名称 拖控件 左边工具栏里选择控件 拖三个按钮控件和一个listbox控件

动态规划问题汇总(一)

基本步骤 文章目录基本步骤509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯62.不同路径63. 不同路径 II343. 整数拆分96.不同的二叉搜索树509. 斐波那契数 递归版本 class Solution {public int fib(int n) {if(n0){return 0;}if(n1){return 1;}return fib(n-1)fib(n-2);} …

【华为OD机试模拟题】用 C++ 实现 - 求字符串中所有整数的最小和

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

2023年2月22日 [随记] 理想、面包

一些简单的吐槽&#xff0c;可以当个故事看一下。 文章目录简单的经历书籍清单这些是买了看过的买了没有仔细看的眨眼间也从业2年11个月多一点&#xff08;就当是三年了&#xff09;&#xff0c;在2023年1月初&#xff0c;距离过年还有两周的时间&#xff0c;因为一些个人原因裸…

拓扑排序的思想?用代码怎么实现

目录 一、拓扑排序的思想 二、代码实现&#xff08;C&#xff09; 代码思想 核心代码 完整代码 一、拓扑排序的思想 以西红柿炒鸡蛋这道菜为例&#xff0c;其中的做饭流程为&#xff1a; 中间2 6 3 7 4的顺序都可以任意调换&#xff0c;但1和5必须在最前面&#xff0c;这是…

详细介绍React生命周期和diffing算法

事件处理 1.通过onXxx属性指定事件处理函数(注意大小写) React使用的是自定义(合成)事件, 而不是使用的原生DOM事件 —— 为了更好的兼容性&#xff1b;React中的事件是通过事件委托方式处理的(委托给组件最外层的元素) ——为了的高效。 2.通过event.target得到发生事件的DOM…

数据挖掘,计算机网络、操作系统刷题笔记54

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记54 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

搭建kafka集群

Kafka集群依赖ZK&#xff0c;需要先启动ZK集群 机器&#xff1a;hadop101,hadoop102, hadoop103 【1】在hadoop101解压&#xff1a; tar -zxvf kafka_2.12-2.4.1.tgz -C ../module/ 【2】在hadoop101修改server.properties配置&#xff1a; #指定broker的id&#xff0c;类似zk…

亚马逊云科技SageMaker:实现自动、可视化管理迭代

现如今&#xff0c;AI正在成为跨时代的技术&#xff0c;在数字经济发展中登上舞台&#xff0c;发挥关键作用。在Gartner发布的《2022年新兴技术成熟度曲线》*报告中&#xff0c;AIGC&#xff08;即AI Generated Content&#xff0c;人工智能自动生成内容&#xff09;被列为2022…

微搭使用笔记(四) 通过循环展示组件+json配置生成表单及数据获取

背景及整体思路 上篇文章我们通过微搭提供的数据模型完成了问卷表单页面的创建和数据采集&#xff0c;相对来说除了数据模型配置略显复杂外其他的倒还算方便。 本文我们通过for循环加上json文件配置的方式实现一个通用表单页面&#xff0c;如果更换了表单只需要替换掉json配置…

stm32 VM8978 音乐播放

一、WAV文件 1、WAV文件简介 2、WAV文件的解析 二、WM8978 1、WM8978介绍 2、WM8978特点 3、WM8978接口 4、WM8978框架 5、 WM8978 寄存器 三、IIS详解 1、IIS介绍 2、 IIS 的特点 3、IIS框架 4、 音频协议 5、 IIS Philips 标准 6、 IIS 时钟 四、音乐播放硬件…

力扣-删除重复的电子邮箱

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;196. 删除重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其…

2.22Linux系统搭建

一.搭建Linux运行环境需要部署Java程序到服务器上,这样程序才能被外面的用户访问到1.安装jdkyum install develop x86_642.安装tomcat1)下载好,通过xshell直接拖到服务器上,依赖了rz命令2)解压缩unzip命令3)使.sh都有可执行权限chmod x *.sh4)启动 sh startup.sh5) 验证 ①ps a…

MAC配置pycharm

Mac配置pycharm 恢复出厂配置 # configuration rm -rf ~/library/preferences/JetBrains/ # caches rm -rf ~/library/caches/JetBrains/ # plugins rm -rf ~/library/application support/JetBrains/ # logs rm -rf ~/library/logs/JetBrains/文件头部 Python #!/usr/bin/e…

Mind+Python+Mediapipe项目——AI健身之跳绳

原文&#xff1a;MindPythonMediapipe项目——AI健身之跳绳 - DF创客社区 - 分享创造的喜悦 【项目背景】跳绳是一个很好的健身项目&#xff0c;为了获知所跳个数&#xff0c;有的跳绳上会有计数器。但这也只能跳完这后看到&#xff0c;能不能在跳的过程中就能看到&#xff0c;…

【Linux】virtualbox获取虚拟机串口日志方法,值得收藏

环境 宿主机&#xff1a;redhat 7.8 virtualbox &#xff1a;6.1.10 虚拟机&#xff1a;UOS 1050u1a x86 一、virtualbox设置 在串口栏中勾选 []启用串口 端口编号选择COM1 端口模式选择裸文件 Port/File Path: 填上 /tmp/box 也就是说我们在宿主机器的/tmp/中创建了vbox的…

C语言知识总结

" "和’ 的比较 " "视为字符串&#xff0c;且编译器在后面自动加上’\0’ 则视为单个字符&#xff0c;整型 1、本质区别 双引号里面的是字符串&#xff0c; 而单引号里面的代表字符。 2、输出区别 str “a”输出的就是a这个字母&#xff1b; str ‘a’…

GSON入门篇(内含教学视频+源代码)

GSON入门篇&#xff08;内含教学视频源代码&#xff09; 教学视频源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87474475 目录GSON入门篇&#xff08;内含教学视频源代码&#xff09;教学视频源代码下载链接地址&#xff1a;[https://d…

j6-IO流泛型集合多线程注解反射Socket

IO流 1 JDK API的使用 2 io简介 输入流用来读取in 输出流用来写出Out 在Java中&#xff0c;根据处理的数据单位不同&#xff0c;分为字节流和字符流 继承结构 java.io包&#xff1a; File 字节流&#xff1a;针对二进制文件 InputStream --FileInputStream --BufferedInputStre…

【数据结构与算法】字符串1:反转字符串I 反转字符串II 反转字符串里的单词 剑指offer(替换空格、左旋转字符串)

今日任务 344.反转字符串541.反转字符串II剑指Offer 05.替换空格151.反转字符串里的单词剑指Offer58-II.左旋转字符串 1.Leetcode344.反转字符串 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/reverse-string &#…