ES5_4Painless
内置脚本语言。
什么时候可以使用Painless
- 更新或删除字段;
- 处理数据聚合;
- Script Field:对返回的字段提前进行计算
- Function Score:对文档的算分进行处理
- Ingest Pipeline中执行脚本
- Reindex
- Update by Query
使用Painless脚本访问字段
在不同上下文中Painless获取文档字段的语法也有所不同
- Ingestion中
ctx.field_name
- Update
ctx._source.field_name
- Search & Aggregation
doc["field_name"]
在Ingest Pipeline中使用Painless
1 | POST _ingest/pipeline/_simulate |
上面的命令中增加了一个类型为script的processor:
- 如果存在content字段,则计算字段长度,并增加一个长度字段
- 否则默认取长度为0
在更新文档时使用Painless
1 | PUT tech_blogs/_doc/1 |
上面脚本根据参数new_views来更新原文档的views字段。
这样做的好处主要是保证文档更新的原子性。
也可以将script保存在Cluster State里,通过id引用:
1 | POST _scripts/update_views |
在查询中使用Painless
1 | GET tech_blogs/_search |
修改查询结果,给views字段加上一个随机值。