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
- elasticsearch 通过painless脚本排序 java客户端
- elasticsearch painless最强教程 二
- windows下安装elasticsearch
- elasticsearch数据导入
- Elasticsearch6.1.3 for CRUD
- k8s部署elasticsearch集群
- 分布式搜索elasticsearch 中文分词集成
- ubuntu 14.04中elasticsearch 2.3 + nginx
- Elasticsearch数据接口用例
- Elasticsearch-PEER RECOVERY(二)
- ElasticSearch 安装分词插件
- ElasticSearch 5.0及head插件安装
- [置顶] 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招!
- 大数据技术之Elasticsearch单机安装与配置
- 网站用户行为数据统计与分析之六:elasticsearch的配置和使用
- Elasticsearch 入门学习笔记
- ElasticSearch 6.x 学习笔记:28.Java API之文档批量操作
- Docker -- 分布式处理与大数据平台-Elasticsearch
- ElasticSearch 之 Client
- Elasticsearch之基本操作