美文网首页
Painless Script简介

Painless Script简介

作者: Ombres | 来源:发表于2019-05-13 19:33 被阅读0次

简介


官方文档:https://www.elastic.co/guide/en/elasticsearch/painless/current/index.html
Painless是一种专门为Elasticsearch设计的简单安全的脚本语言。也是官方主推的脚本语言,后续的Elasticsearch只会支持它。可以在Elasticsearch任意可以被使用的地方使用,比如script_fields script_score

优点

  • 快速执行:比其他替代品的速度快几倍
  • 安全性:带有方法调用/字段粒度的细粒度白名单
  • 可选类型:变量和参数可以使用显示类型或者动态类型def
  • 语法:拓展了java语法,提供Groovy风格的脚本语言特性,使写脚本更加简单。
  • 优化:专门为Elasticsearch脚本设计。

简单用法

  • 获取Document Values:doc['fields']
  • 更新字段:ctx._source.<fields>
  • 日期:Date类型的字段可以通过ReadableDateTime来获取,支持getYeargetDayOfWeekgetMillis
  • 正则:默认是禁止的。可以通过elasticsearch.yml设置script.painless.regex.enabled: true来启用正则。(Elastic团队目前也希望有一个更好的替代方案,后续可能会有其他方式来启用正则)常用的语法/pattern/ =~ ==~ Pattern.matcher Matcher.replaceAll$1\1代表分组)

查询的时候也可使用脚本,但是不能够使用倒排索引。因此尽量避免脚本查询吧

方法调用及分派

使用接收器、名称、参数数量来进行方法分派

不支持方法重载

  • 对于def类型的操作更加简单,可能更快。
  • 保持了一致性。
  • 保证Painless的可维护性。

调试

Painless提供了一个方法Debug.explain来捕获异常,可以通过_explain来查看上下文内容

语言规范

基本
  • Painless的语法类似Groovy。
  • Painless本质上是Java添加了一些脚本语言特性的子集,写的时候更加简单。
  • Painless脚本用 ANTLR4ASM 库 解析编译
注释

支持单行和多行注释

// single-line comment

<code> // single-line comment

/* multi-
   line
   comment */

<code> /* multi-line
          comment */ <code>

<code> /* multi-line comment */ <code>
关键词

if else while do for in continue break return new try catch throw this instanceof

相关文章

网友评论

      本文标题:Painless Script简介

      本文链接:https://www.haomeiwen.com/subject/nhgraqtx.html