教程 elasticsearch tutorial

Painless 脚本

Painless 是 Elasticsearch 专门设计的安全、高效的脚本语言,广泛应用于动态字段计算、复杂查询和聚合操作中。

1. 基础语法

  • 类似 Java 语法,支持变量、条件语句、循环等
  • 支持内置函数和常用数据结构

示例:简单计算

txt
return doc['price'].value * 1.2;

`

2. 使用场景

  • 动态计算字段值
  • 自定义排序逻辑
  • 脚本聚合和过滤
  • 条件判断和复杂查询

3. 在查询中的应用示例

json
GET /my-index/_search
{
  "query": {
    "script_score": {
      "query": { "match_all": {} },
      "script": {
        "source": "doc['popularity'].value * 2 + doc['sales'].value",
        "lang": "painless"
      }
    }
  }
}

4. 脚本聚合示例

json
GET /my-index/_search
{
  "size": 0,
  "aggs": {
    "price_adjusted_avg": {
      "avg": {
        "script": {
          "source": "doc['price'].value * 1.1",
          "lang": "painless"
        }
      }
    }
  }
}

5. 安全与性能

  • Painless 运行在沙箱环境,保证安全
  • 脚本应尽量简洁,避免性能瓶颈
  • 支持缓存常用脚本,提升执行效率

掌握 Painless 脚本语言,能帮助你灵活扩展 Elasticsearch 功能,实现动态复杂的业务需求。