脚本语法是:
“script”: {
“lang”: “xxx”,
“source” | “id”: “xxx”,
“params”: {xxx}
}
lang是language的意思,指定脚本是用哪种语言写的,值可以是painless、expression,默认是painless。
source用于指定脚本,id用于指定我们自己预定义的脚本。
params用于指定在脚本中使用的参数。es在每次遇到新脚本时,会将该脚本编译并缓存起来,而编译是一个相对耗时的操作。所以,如果脚本只是参数值不同,建议使用params,而不是把参数值在脚本中写死。
脚本可以用在很多地方,如update、update_by_query、reindex、script query、script-based sorting、aggregation。
https://www.cnblogs.com/koushr/p/5873409.html
在使用Elasticsearch(es)进行DSL查询时,免不了有字段间进行比较、四则运算等一些简单的查询过程中的计算需求,那么我们就需要用到es查询语法中的script参数。通用过用script参数,我们就可以进行一些基本的比较和其他的运算。
https://www.jianshu.com/p/7d59711b8598
参数说明:
lang:脚本使用的语言,默认是painless。
source:脚本的核心部分,id应用于:stored script。
params:传递给脚本使用的变量参数。
在学习scripts时,发现有许多场景使用,比如update、update-by-query、reindex等,结合scripts语法说,lang会有painless、expression、mustache等选择;source中有ctx、doc[‘field_name’]、_source等方式取值。
https://blog.csdn.net/yuyinghua0302/article/details/107635067
在Elasticsearc中,它使用了一个叫做Painless的语言。它是专门为Elasticsearch而建立的。Painless是一种简单,安全的脚本语言,专为与Elasticsearch一起使用而设计。 它是Elasticsearch的默认脚本语言,可以安全地用于inline和stored脚本。它具有像Groovy那样的语法。自Elasticsearch 6.0以后的版本不再支持Groovy,Javascript及Python语言。
https://www.cnblogs.com/sanduzxcvbnm/p/12083590.html
"script": {
"lang": "...",
"source" | "id": "...",
"params": { ... }
} 这里lang默认的值为"painless"。在实际的使用中可以不设置,除非有第二种语言供使用 source可以为inline脚本,或者是一个id,那么这个id对应于一个stored脚本 任何有名字的参数,可以被用于脚本的输入参数
存储的脚本 (stored script)
在这种情况下,scripts可以被存放于一个集群的状态中。它之后可以通过ID进行调用:
PUT _scripts/add_age
{
"script": {
"lang": "painless",
"source": "ctx._source.age += params.value"
}
} 在这里,我们定义了一个叫做add_age的script。它的作用就是帮我们把source里的age加上一个数值。我们可以在之后调用它:
POST twitter/_update/1
{
"script": {
"id": "add_age",
"params": {
"value": 2
}
}
} 通过上面的执行,我们可以看到,age将会被加上2
https://zhuanlan.zhihu.com/p/91662802
https://yemilice.com/2020/12/02/elasticsearch%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95(golang%E5%AE%9E%E7%8E%B0)/