一 、用途
我们一般在添加一个需要计算后的字段或者通过某种规则计算后的值来排序是会使用到elasticsearch的脚本功能,es在5.x版本以后默认使用的就是painless无痛脚本
script_fields用法:
sort用法:
二、painless语法
1、常用数据类型: int、double、String、List、Map、bool (和java一致)
2、变量定义:
定义变量有两种方式,动态类型和静态类型,建议用静态类型,静态类型的计算速度是动态类型的10倍
动态类型定义方式: def a = "abc"
静态类型定义方式: int a = 1; Sting b = "asdsd"
3、获取文档中某个字段的值的用法:
获取doc下字段: doc['name'].value
nested字段取出来后就是数组,可用下标获取, 后面不用加value: doc['expect_jobs'][1]
doc以外的字段可直接使用,如下:
4、提取参数的用法
在script下面添加params字段,params中就是我们提取的参数,用params.age的方式在脚本中使用,如下:
5、if else用法,与条件使用&& , 或的条件使用|| ,在使用painless脚本时,每一行结束需要加分号, 大括号后不能加分号;
6、for循环的用法:
7、script中必须有return, return是返回给es计算后的值, 没有return会报错:
特别注意: painless在 有int和double字段混合计算时,会对double值自动取整, 导致计算值有偏差,所以建议数值计算都使用double类型