主题
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 功能,实现动态复杂的业务需求。