您的位置:首页 > 大数据 > 人工智能

Elasticsearch:Painless execute API

2020-09-02 10:57 1586 查看

Painless execute API 允许执行任意脚本并返回结果。请注意的是:这个 API 是新的,请求方式及响应在未来可能会有所改变。

Context

Context 也即是上下文的意思。Context 控制了脚本如何执行,在运行时可以使用哪些变量,返回类型是什么。

 

Plainless test context

这是默认的 context。painless_test 上下文按原样执行脚本,并且不添加任何特殊参数。 唯一可用的变量是 params,可用于访问用户定义的值。 脚本的结果总是转换为字符串。 如果未指定上下文,则默认使用此上下文。

例子

我们发送如下的请求:

[code]POST /_scripts/painless/_execute
{
"script": {
"source": "params.count / params.total",
"params": {
"count": 100.0,
"total": 1000.0
}
}
}

上面的响应结果为:

[code]{
"result": "0.1"
}

在上面,我们通过 params 把参数传入到 source 里进行执行,并返回结果。

 

Filter context

filter 上下文执行脚本的方式就像在脚本查询中执行脚本一样。 为了进行测试,必须提供一个文档,以便可以在内存中对其进行临时索引并可以从脚本中对其进行访问。 更准确地说,此类文档的 _source,存储的字段和 doc 值可用于正在测试的脚本。

可以在 context_setup 中为过滤器上下文指定以下参数:

  • document:包含将在内存中临时建立索引并可以从脚本访问的文档。
  • index:索引名称,其中包含与要编制索引的文档兼容的映射。

例子

[code]PUT /my-index-000001
{
"mappings": {
"properties": {
"field": {
"type": "keyword"
}
}
}
}

POST /_scripts/painless/_execute
{
"script": {
"source": "doc['field'].value.length() <= params.max_length",
"params": {
"max_length": 4
}
},
"context": "filter",
"context_setup": {
"index": "my-index-000001",
"document": {
"field": "four"
}
}
}

响应:

[code]{
"result" : true
}

在上面,我们首先定义了一个叫做 my-index-000001 的索引。由于我们使用了 filter 上下文,我们通过 context_setup 把相应的 index 及 document 进行定义。

 

Score context

Ccore 上下文将执行脚本,就像在 function_score 查询中的 script_score 函数中执行脚本一样。

可以在 context_setup 中为得分上下文指定以下参数:

  • document:包含将在内存中临时建立索引并可以从脚本访问的文档。
  • index:索引名称,其中包含与要编制索引的文档兼容的映射。
  • query:如果在脚本中使用了 _score,则 query 可以指定它将用于计算分数。

例子

[code]PUT /my-index-000002
{
"mappings": {
"properties": {
"field": {
"type": "keyword"
},
"rank": {
"type": "long"
}
}
}
}

POST /_scripts/painless/_execute
{
"script": {
"source": "doc['rank'].value / params.max_rank",
"params": {
"max_rank": 5.0
}
},
"context": "score",
"context_setup": {
"index": "my-index-000002",
"document": {
"rank": 4
}
}
}

响应:

[code]{
"result" : 0.8
}

 

参考:

【1】https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-execute-api.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: