🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Groovy 脚本语言 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-scripting-groovy.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-scripting-groovy.html) 译文链接 : [http://www.apache.wiki/pages/editpage.action?pageId=10027176](http://www.apache.wiki/pages/editpage.action?pageId=10027176) 贡献者 : [@琴剑蓝天](http://www.apache.wiki/users/viewuserprofile.action?username=xujie),[ApacheCN](/display/~apachecn),[Apache中文网](/display/~apachechina) 5.0.0中弃用。 Groovy将被新的脚本语言Painless所取代 默认情况下,**Groovy** 可用于Elasticsearch。 虽然受 **Java** 安全管理器限制,但它不是沙盒语言,默认情况下只能使用文件脚本。 启用内联或存储的Groovy脚本是一种安全风险,只有当您的Elasticsearch集群受到外部环境的保护时,才应该考虑。 即使一个简单的 _while(true){}_ 循环也可能作为对您的集群的拒绝服务攻击。  有关脚本的安全问题的详细信息,请参阅[脚本和安全性](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-scripting-security.html),包括如何自定义类白名单。 ## Doc值属性和方法 **Groovy** 中的 **Doc** 值支持以下属性和方法(取决于底层字段类型): _doc['field_name'].value_      字段的本机值。例如,如果它是一个短型,它会很短。 _doc['field_name'].values_     字段的本机数组值。例如,如果它是一个简短的类型,它会很短[]。请记住,一个字段可以在单个文档中具有多个值。如果该字段没有值,则返回一个空数组。 _doc['field_name'].empty_ 一个布尔值,指示该字段在文档中是否没有值。  _doc['field_name'].lat_ 地理位置类型的纬度,或空值。 _doc['field_name'].lon_ 地理点类型的经度,或空值。 _doc['field_name'].lats_     地理点类型的纬度或空数组。 _doc['field_name'].lons_     地理点类型的经度,或空数组。 _doc['field_name'].arcDistance(lat, lon)_     该地理点字段与提供的纬度/距离的弧距(以米为单位)。 _doc['field_name'].arcDistanceWithDefault(lat, lon, default)_     该地理点字段与提供的lat / lon的弧距(以米为单位),具有空字段的默认值 _doc['field_name'].planeDistance(lat, lon)_     该地理点字段与提供的纬度/距离的平面距离(以米为单位)。 _doc['field_name'].planeDistanceWithDefault(lat, lon, default)_     该地理点字段与提供的lat / lon的平面距离(以米为单位),空字段的默认值 _doc['field_name'].geohashDistance(geohash)_     该地理位置字段与提供的geohash的弧距(以米为单位)。 _doc['field_name'].geohashDistanceWithDefault(geohash, default) _      来自提供的 _geohash_ 的该地理点字段的弧距(以米为单位),空字段的默认值 ## Groovy内置功能 有几个可以在脚本中使用的内置函数。 他们包括: | 函数 | 描述 | | --- | --- | | `sin(a)` | 返回角度的三角正弦。 | | `cos(a)` | 返回角度的三角余弦。 | | `tan(a)` | 返回角度的三角正切。 | | `asin(a)` | 返回一个值的正弦。 | | `acos(a)` | 返回值的反余弦值。 | | `atan(a)` | 返回值的反正切值。 | | `toRadians``(angdeg)` | 将以度为单位的角度转换为以弧度测量的大致相等的角度 | | `toDegrees``(angrad)` | 将以度为单位的角度转换为以弧度测量的大致相等的角度 | | `exp(a)` | 返回欧拉的数字e提高到价值的力量。 | | `log(a)` | 返回欧拉的数字e提高到价值的力量。 | | `log10(a)` | 返回欧拉的数字e提高到价值的力量。 | | `sqrt(a)` | 返回欧拉的数字e提高到价值的力量。 | | `cbrt(a)` | 返回双值的多维数据集根。 | | `IEEEremainder``(f1, f2)` | 根据IEEE 754标准计算两个参数的余数运算。 | | `ceil(a)` | 返回大于或等于参数的最小(最接近负的无穷大)值,并且等于数学整数。 | | `floor(a)` | 返回小于或等于参数的最大(最接近正无穷大)的值,等于一个数学整数。 | | `rint(a)` | 返回与参数最接近的值,并等于数学整数。 | | `atan2(y, x)` | 从直角坐标(x,y)到极坐标(r,theta)的转换返回角度θ。 | | `pow(a, b)` | 将第一个参数的值返回到第二个参数的幂。 | | `round(a)` | 返回最接近参数的int。 | | `random()` | 返回一个随机双重值。 | | `abs(a)` | 返回值的绝对值。 | | `max(a, b)` | 返回两个值中的较大值。 | | `min(a, b)` | 返回两个值中的较小值。 | | `ulp(d)` | 返回参数的ulp的大小。 | | `signum(d)` | 返回参数的signum函数。 | | `sinh(x)` | 返回值的双曲正弦。 | | `cosh(x)` | 返回值的双曲余弦值。 | | `tanh(x)` | 返回值的双曲正切值。 | | `hypot(x, y)` | 返回sqrt(x2 + y2),没有中间溢出或下溢。 |