加载中

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

通过尝试我们的 指南来编写您的第一个 Painless 脚本,或者跳转到我们的 教程中,获取使用示例数据的实际案例。

有关完整的语法和语言功能,请参阅 Painless 语言规范

一旦您开始使用,请参阅 在 Elasticsearch 中调试 Painless 脚本,获取关于如何解决常见脚本错误的有用提示。

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.