ES-脚本查询
创始人
2025-05-30 01:08:58

1. 概念

Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于Java,也有注释、关键字、类型、变量、函数等,其就要相对于其他脚本高出几倍的性能,并且安全可靠,可以用于内联和存储脚本。

2. 支持的语言

(1)groovy:ES 1.4.x-5.0的默认脚本语言

(2)painless:JavaEE使用java语言开发,.Net使用C#/F#语言开发,Flutter使用Dart语言开发,同样,ES 5.0+版本后的Scripting使用的语言默认就是painless,painless是一种专门用于Elasticsearch的简单,用于内联和存储脚本,是ES 5.0+的默认脚本语言,类似于Java,也有注释、关键字、类型、变量、函数等,是一种安全的脚本语言。并且是Elasticsearch的默认脚本语言。

(3)其他:

expression:每个文档的开销较低:表达式的作用更多,可以非常快速地执行,甚至比编写native脚本还要快,支持javascript语法的子集:单个表达式。缺点:只能访问数字,布尔值,日期和geo_point字段,存储的字段不可用

mustache:提供模板参数化查询

特点
语法简单,学习成本低
灵活度高,可编程能力强
性能相较于其他脚本语言很高
安全性好
独立语言,虽然易学但仍需单独学习
相较于DSL性能低
不适用于复杂的业务场景

3. 应用场景:
各种复杂的应用场景,如自定义评分、自定义聚合查询等。
正则:
早先某些版本正则表达式默认情况下处于禁用模式,因为它绕过了painless的针对长时间运行和占用内存脚本的保护机制。而且有深度对战行为。如果需要开启正则,需要配置:script.painless.regex.enabled: true

注意:通常正则的使用范围比较小,应用范围基本限制在数据量比较小和并发量比较小的应用场景下。

doc[‘field’].value和params[‘_source’][‘field’]:

理解之间的区别是很重要的,doc[‘field’].value和params[‘_source’][‘field’]。首先,使用doc关键字,将导致该字段的条件被加载到内存(缓存),这将导致更快的执行,但更多的内存消耗。此外,doc[…]符号只允许简单类型(不能返回一个复杂类型(JSON对象或者nested类型)),只有在非分析或单个词条的基础上有意义。但是,doc如果可能,使用仍然是从文档访问值的推荐方式,因为_source每次使用时都必须加载并解析。使用_source非常缓慢。

相关内容

热门资讯

安徽肥西苗木再启出海新程 转自:新华网12月24日,在位于安徽肥西县的中国中部花木城丰乐自贸园内,一批紫薇、红枫、广玉兰、七叶...
勇于担当 积极进取(香江在线) 从《维护国家安全条例》两部附属法例刊宪生效,到携手广东、澳门成功举办十五运会和残特奥会,再到成功举行...
“奶奶喜丧,能来送最后一程吗?... 本文转自【新民晚报】;近日,黑龙江哈尔滨,在社交平台上,一封求助信引发网友关注。一名网友称,90岁奶...
衢州整合乡村资源促农增收   “一个院子能多赚1万多块,春节前全部卖完,再养新鱼。”近日,在龙游县湖镇镇地圩村的溪鱼共富庭院里...
闽清“村唱”IP走进古田 用歌... 26日,由宁德古田县文体旅局指导,古田县世林集团与闽清心上莲联合打造,以“欢歌古田、心归世林”为主题...