ES-painless脚本语言
painless
Painless 是 Elasticsearch 中的脚本语言,专为高性能、简单和安全的脚本执行设计。它广泛用于 Elasticsearch 的自定义脚本需求中,比如过滤条件、聚合和数据处理任务。Painless 语言的语法和 Java 相似,提供了丰富的内置方法和类型支持, 可以高效处理文档数据。
Painless 的主要用途
* 过滤脚本:根据复杂条件过滤文档。
* 脚本化字段:动态计算和返回新字段。
* 聚合脚本:在聚合中进行复杂的计算或动态分组。
* 评分脚本:用于自定义搜索结果的评分逻辑。
Painless 基本语法
Painless 脚本的编写和 Java 或 Groovy 类似,但 Painless 更加安全且执行更快。以下是一些 Painless 的基础语法:
变量声明:
painless
int x = 10;
double y = 3.14;
String name = 'Elasticsearch';
条件语句:
painless
if (x > 0) {
return "Positive";
} else {
return "Non-positive";
}
循环:
painless
for (int i = 0; i < 10; i++) {
// 执行操作
}
访问文档字段:
使用 doc 关键字访问倒排索引中的字段(只读):
painless
if (doc['age'].value > 18) {
return "Adult";
}
使用 params 访问外部传入的参数:
painless
String country = params['country'];
字符串操作:
painless
String name = "Elastic";
String result = name + "search";
数组和集合:
Painless 支持列表和映射。
painless
List items = ['apple', 'banana', 'cherry'];
Map info = {'name': 'Alice', 'age': 25};
Painless 聚合示例
假设我们要聚合数据,并希望自定义每个桶的分组条件:
painless
{
"aggs": {
"custom_buckets": {
"terms": {
"script": {
"source": """
if (doc['age'].size() > 0 && doc['age'].value >= 18) {
return "Adult";
} else {
return "Minor";
}
""",
"lang": "painless"
}
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?