Elasticsearch groovy脚本

Elasticsearch groovy脚本教程

Elasticsearch 中,其实是有个内置的脚本支持的,可以基于 groovy 脚本实现各种各样的复杂操作,我们只需要将脚本放在 Elasticsearch 的 script 目录下。

同时,Elasticsearch 的 groovy 脚本还支持内置脚本和外置脚本两种形式,但高版本的 Elasticsearch 已经将外置脚本的方式去除了,因此,不推荐使用。

groovy内置脚本详解

语法

POST indexname/_update/id { "script" : "ctx._source.field = value" }

参数

参数 描述
indexname 需要更新的索引名
id 需要更新的文档 id
script 说明我们使用内置脚本
ctx 固定的语法
_source 代表源数据的集合
field 需要更新的字段
value 需要将字段设置的值

说明

这是内置脚本固定的写法,ctx 代表上下文,_source 代表数据源对象,我们通过该对象可以获取整个数据源,filed 是我们需要修改的字段,value 是我们需要更新的值。

groovy外置脚本详解详解

语法

POST indexname/_update/id { "script": { "lang": "groovy", "file": "script-filename", "params": { "key": "value" } } }

参数

参数 描述
indexname 需要更新的索引名
id 需要更新的文档 id
lang 通过 lang 指定脚本类型
file 脚本名
value1 将字段更新为的值
params 指定脚本需要使用的参数列表
key 参数的键
value 参数的值

说明

通过 lang 指定了我们使用的脚本语言,通过 file 指定脚本路径,通过 params 指定脚本使用的参数。同时,我们需要将脚本放在 es 的安装目录的 script 目录下。

案例

内置脚本更新文档

我们在 Kibana 的控制台上,输入以下代码,新建一个文档

PUT haicodernet/_doc/1 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "view_num":100, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

07_Elasticsearch groovy脚本.png

我们看到,此时我们创建文档成功了,现在,我们使用全局内置 groovy 脚本的方式,更新文档,具体代码如下:

POST haicodernet/_update/1 { "script" : "ctx._source.view_num += 1" }

更新成功后,如下图所示:

08_Elasticsearch groovy脚本.png

现在,我们查看该文档的内容,具体命令如下:

GET haicodernet/_doc/1

更新成功后,如下图所示:

09_Elasticsearch groovy脚本.png

我们看到,此时 view_num 字段的值已经被加上了 1,即,我们使用内置脚本的方式修改了数据。

外置脚本更新文档

我们在 Kibana 的控制台上,输入以下代码,新建一个文档:

PUT haicodernet/_doc/2 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "view_num":100, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

10_Elasticsearch groovy脚本.png

我们看到,此时我们创建文档成功了,现在,我们使用外置 groovy 脚本的方式,更新文档,我们首先在 Elasticsearch 安装目录的 script 路径下新建一个 update-2.groovy 的脚本,默认 script 目录不存在,我们使用 mkdir 命令创建该目录,具体命令如下:

mkdir /usr/local/elk/es/script

接着,我们使用 echo 命令,新建一个 update-2.groovy 脚本,并输入脚本内容,具体命令如下:

echo "ctx._source.view_num+=1" > /usr/local/elk/es/script/update-2.groovy echo "ctx._source.name=JavaScript" >> /usr/local/elk/es/script/update-2.groovy

执行完毕后,如下图所示:

11_Elasticsearch groovy脚本.png

现在,我们使用外置脚本,开始执行更新操作,具体命令如下:

POST haicodernet/_update/2 { "script": { "lang": "groovy", "file": "update-2", "params": { } } }

此时,就可以成功更新文档。

Elasticsearch groovy脚本总结

在 Elasticsearch 中,其实是有个内置的脚本支持的,可以基于 groovy 脚本实现各种各样的复杂操作,我们只需要将脚本放在 Elasticsearch 的 script 目录下。

同时,Elasticsearch 的 groovy 脚本还支持内置脚本和外置脚本两种形式,但高版本的 Elasticsearch 已经将外置脚本的方式去除了,因此,不推荐使用。