对elasticsearch中的 painless 的学习

2024-01-31 22:18

本文主要是介绍对elasticsearch中的 painless 的学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  之前研究了挺多的es集群规划,读写原理等。都有将这些只是用在我们的集群中。近期有需求修改es中的字段数据,并且还不是简单的修改某个字段。不仅仅要修改字段,而且想要经过复杂的逻辑判断以后才能去修改数据。

  于是终于接触到了es中神奇的脚本语言painless。

  在这篇文章中,我首先会分享出来自己查看的文档资料(最好的学习资料还是扒着官网一点一点的扣)。虽然文档上都有,但是还挺难找到。不用担心,我都会把原文链接都放出来。另外我会分享一下我对英文文档学习的心得,自己的一些潜在的理解。

先放学习文档


 入口:

https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-guide.html


入门案例


https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-walkthrough.html 

学习painless特性

https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-lang-spec.html

painless API


https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-shared.html

学习心得

由于都是英文文档,都是近期晚上研究的,没有太多时间去做中文翻译。只讲有用的吧!

 文档都是英文的,我们可以借助一点翻译,并不难。文档内容也不是很多,花几个小时就能通读一遍。所以不要有任何的恐惧的心理。

  如果您熟悉java语言,那就太好了!因为painless就继承自java8。这是什么意思呢。也就是我们的你几乎完全可以把painless当做java来写,或者把写好的java代码,放在脚本里边来执行。并且还添加了一些内容,比如添加了def 弱对象类型。

 painless的API就在这里(哪里不会写了,随时可以查看一下):

https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-shared.html

更多的painless的细节

先熟悉一下script语法结构

POST /seats/_update/3
{"script": {"source": "ctx._source.sold = true; ctx._source.cost = params.sold_cost","lang": "painless","params": {"sold_cost": 26}}
}

 source:  所谓的脚本内容。我们可以写一些代码逻辑,来处理我们的每一条数据。这里有我们很大的操作空间。想要对数据做什么操作,都可以写在这里,最后被执行。

 lang:就是脚本语言。es5版本之后就只支持这一种脚本语言了。(这里可以是一段java代码)

 params:实际上就是入参。时间就是一个 Map<String,Object> 对象。我们可以在上边的source里边来访问到 params。语法也很简单, 就通过 params.字段 就可以获取到值。 这就像是.get()。

 如果你熟悉java语言的话,完全可以把  source当做方法体,而params就当做是入参。

ctx: ctx是出现在source里边的内容,它看起来不好理解(单请牢记它,它会频繁的出现在脚本中)。实际上,它就是一个document对象。我们通常使用 ctx._source 来获取到我们要操作这条数据对象。

我们通常操作的就是 ctx一条文档数据下的 _source的内容,如截图:

  再如官方文档告诉我们的,我们通过 ctx._source 获取到的就是一个map对象。我们要操作的数据就放在这里边。 

更多内容

等待继续更新,今晚太晚了。

这篇关于对elasticsearch中的 painless 的学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665221

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创