Painless 简介
本简介专为 Painless 脚本编写新手设计。如果您已经熟悉 Painless,请参阅 Painless 语言规范以了解语法细节和高级功能。
Painless 是一种专为 Elasticsearch 设计的安全、高性能且灵活的脚本语言。作为 Elasticsearch 的默认脚本语言,Painless 让您能够安全地在整个 Elastic Stack 部署中自定义搜索行为、数据处理和操作工作流。
Painless 在 Elasticsearch 5.0 中引入,用于替代 Groovy,与之前的脚本解决方案相比,它在安全性和性能上都有所提升。Painless 基于 Java 虚拟机 (JVM) 构建,在提供类 Java 的熟悉语法的同时,通过防护机制和沙箱环境增强了安全边界。
与通用脚本语言不同,Painless 是专为 Elasticsearch 构建的,在实现原生性能的同时,防止未经授权访问系统资源。这种架构使得 Painless 既具备强大的数据操作能力,又适用于生产环境。
常见的用例包括:基于现有数据创建新字段、计算日期之间的时间差、从日志消息中提取结构化数据,以及在搜索评分中实现自定义业务逻辑。有关更多示例,请参阅我们的分步 教程。
Painless 支持在 Elasticsearch 的各种上下文中进行脚本编写,例如:
- 基于业务需求的自定义搜索评分
- 在查询执行期间计算值的运行时字段创建
- 无需重新索引数据的实时过滤和转换
- 在索引期间转换文档
- 解析并从非结构化字段中提取结构化数据
- 根据您的数据计算指标和摘要
- 使用 Watcher 解决方案监控数据模式并触发警报
- 转换警报负载以实现有针对性的通知和操作
您可以以内联方式编写 Painless 脚本以进行快速操作,或者为您数据操作创建可重用的函数。以下是一个应用于数据转换的 Painless 脚本示例
String productTitle(String manufacturer, String productName) {
return manufacturer + " - " + productName;
}
return productTitle("Elitelligence", "Winter jacket");
此脚本演示了 Painless 脚本编写的几个方面
- 函数定义: 带有类型化参数的自定义
productTitle函数 - 数据类型: 字符串和整数参数处理
- 返回值: 函数返回格式化的字符串输出
Painless 在所有脚本上下文中提供三大核心优势
- 安全性: 防止访问受限 Java API 的细粒度允许列表。
- 性能: 直接编译为 字节码消除了解释开销并利用了 JVM 优化。
- 灵活性: 涵盖从搜索评分到数据处理再到操作处理,Elasticsearch 中广泛的脚本语法和上下文。
您可以在 Elasticsearch 的多个上下文中使用 Painless
- 开发工具控制台 (Dev Tools Console): 用于交互式脚本开发和测试
- 采集管道 (Ingest pipelines): 用于索引期间的数据转换
- 搜索查询: 用于自定义评分和脚本字段
- 运行时字段 (Runtime fields): 用于动态字段创建
- 更新 API (Update API): 用于文档修改
- Watcher: 用于警报条件和操作
通过尝试我们的 指南来编写您的第一个 Painless 脚本,或者跳转到我们的 教程中,获取使用示例数据的实际案例。
有关完整的语法和语言功能,请参阅 Painless 语言规范。
一旦您开始使用,请参阅 在 Elasticsearch 中调试 Painless 脚本,获取关于如何解决常见脚本错误的有用提示。