当前位置: 首页 > news >正文

SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用)

SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用)


文章目录

  • SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用)
    • @[TOC]
  • 前言
  • 一、Elasticsearch的script语法介绍
  • 二、Elasticsearc中数据准备
  • 三、script实现案例
    • 1.批量新增es中List<Integet>类型数据
    • 2.批量删除es中List<Integet>类型数据
  • 总结

章节
第一章链接: SpringBoot集成Elasticsearch7.x(1)|(增删改查功能实现)
第二章链接: SpringBoot集成Elasticsearch7.x(2)|(复杂查询)
第三章链接: SpringBoot集成Elasticsearch7.x(3)|(aggregations之指标聚合查询)
第四章链接: SpringBoot集成Elasticsearch7.x(4)|(aggregations之分桶聚合查询)
第五章链接: SpringBoot集成Elasticsearch7.x(5)|(term、match、match_phrase区别)
第六章链接: SpringBoot集成Elasticsearch8.x(6)|(新版本Java API Client使用)
第七章链接: SpringBoot集成Elasticsearch8.x(7)|(新版本Java API Client使用完整示例)

前言

Painless Scripting 简介:
Painless是一种简单,安全的脚本语言,专为与Elasticsearch一起使用而设计。从ES5.0开始,它是Elasticsearch的默认脚本语言,可以安全地用于内联和存储脚本。

Painless特点:
性能牛逼:Painless脚本运行速度比备选方案(包括Groovy)快几倍。
安全性强:使用白名单来限制函数与字段的访问,避免了可能的安全隐患。
可选输入:变量和参数可以使用显式类型或动态def类型。
上手容易:扩展了java的基本语法,并兼容groove风格的脚本语言特性。
特定优化:是ES官方专为Elasticsearch脚本编写而设计。

使用场景:
用于解决复杂业务问题,如:自定义字段、自定义评分、自定义更新、自定义聚合分析等

缺点:
性能问题。官方文档性能优化中明确指出使用脚本会导致性能低;
如非必要,不要使用脚本,尽量用其他方式替换

一、Elasticsearch的script语法介绍

lang:指定编写脚本的语言。默认为painless.
source:source为脚本本身
params:指定作为变量传递到脚本中的任何命名参数。

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

二、Elasticsearc中数据准备

准备一篇文章,存入ES数据库中,versionList是一个list数组,表示该文章的版本号列表,后续的操作会针对版本进行操作

{"_index": "64c36a324bfade24ee0f18ab","_id": "ACNZm4kBoucrmKIhwyQC","_version": 1,"_score": 1,"_source": {"id": "c32e0056a6284ee7b2ea6e483ce874e2","docId": "64c36af14bfade24ee0f18ba","parentId": "64c36af14bfade24ee0f18ba","docName": "Csdn博客介绍.pdf","fileExtension": "pdf","content": "CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区","title": "Csdn博客介绍","sort": 13,"versionList": [1]}
}

三、script实现案例

1.批量新增es中List类型数据

业务需求,需要在原有的某个版本上新建一个新的版本,具体实现如下,找到对应的版本文章,然后对其进行新增操作

    public void addVersion(String indexName, Integer fromVersion, Integer newVersion) {Map<String, JsonData> map = Maps.newHashMap();map.put("newVersion", JsonData.of(newVersion));try {client.updateByQuery(d -> d.index(indexName).query(q -> q.term(t -> t.field("libVersionList").value(fromVersion))).script(s -> s.inline(src -> src.lang("painless").source("ctx._source.versionList.add(params.newVersion)").params(map))));} catch (IOException e) {log.error(e.getMessage());}}

2.批量删除es中List类型数据

业务需求,需要删除某个版本,具体实现如下,找到对应的版本文章,然后对其进行移除版本号操作,
注意:此处需要便利versionList,找到对应的下标,.remove()操作是删除对应位置的数据

    public void deleteVersion(String indexName, Integer version) {Map<String, JsonData> map = Maps.newHashMap();map.put("version", JsonData.of(version));try {client.updateByQuery(d -> d.index(indexName).query(q -> q.term(t -> t.field("versionList").value(version))).script(s -> s.inline(src -> src.lang("painless").source("for (int i = 0; i < ctx._source.versionList.length; i++){if(params.version == ctx._source.versionList[i]){ctx._source.versionList.remove(i)}}").params(map))));} catch (IOException e) {log.error( e.getMessage());}}

总结

以上就是elasticsearch java client 中使用script对数据镜像批量跟新的操作,语法熟悉了操作起来还是很简单的。

http://www.lryc.cn/news/110564.html

相关文章:

  • SpringBoot复习:(19)Condition接口和@Conditional注解
  • K8s中的Controller
  • 【MFC】03.常用复杂控件的使用-笔记
  • Autosar诊断实战系列14-NRC优先级解析
  • 《向量数据库指南》——腾讯云向量数据库Tencent Cloud VectorDB产品特性,架构和应用场景
  • xcode 的app工程与ffmpeg 4.4版本的静态库联调,ffmpeg内下的断点无法暂停。
  • 机器学习06 数据准备-(利用 scikit-learn基于Pima Indian数据集作 数据特征选定)
  • 机器学习-特征选择:如何使用Lassco回归精确选择最佳特征?
  • SpringBoot之Actuator基本使用
  • 排序算法(一)
  • Centos虚拟机忘记密码-修改密码
  • Shell 分析服务器日志常用命令
  • mysql8配置binlog日志skip-log-bin,开启、关闭binlog,清理binlog日志文件
  • 机器学习:训练集与测试集分割train_test_split
  • 淘宝API开发(一)简单介绍淘宝API功能接口作用
  • Redis相关面试题
  • 数据库简介
  • 腾讯云国际轻量应用服务器怎么使用呢?
  • arm环境cloudstack在vpc下创建虚拟机失败
  • Linux上安装Keepalived,多台Nginx配置Keepalived(保姆级教程)
  • centos7 ‘xxx‘ is not in the sudoers file...
  • Zebec Payroll :计划推出 WageLink On-Demand Pay,进军薪酬发放领域
  • 【2023】字节跳动 10 日心动计划——第三关
  • 【无网络】win10更新后无法联网,有线无线都无法连接,且打开网络与Internet闪退
  • HTML <script> 标签
  • FPGA----UltraScale+系列的PS侧与PL侧通过AXI-HP交互(全网唯一最详)附带AXI4协议校验IP使用方法
  • Unity小游戏——迷你拼图
  • 三 动手学深度学习v2 —— Softmax回归+损失函数+图片分类数据集
  • Stable Diffusion 使用教程
  • 在线考试系统springboot学生试卷问答管理java jsp源代码mysql