# Painless 脚本

URL: https://caijiao.org/elasticsearch/03.advanced/11.script-painless
Source: docs/elasticsearch/03.advanced/11.script-painless.md
Description: 本章介绍 Elasticsearch 内置的 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 功能，实现动态复杂的业务需求。
