AI智能
改变未来

Elasticsearch:Painless execute API

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

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Elasticsearch:Painless execute API