一、作用:
通过使用脚本,可以在 Elasticsearch 计算自定义表达式。
二、支持哪些script脚本语言
默认的脚本语言采用的是painless
三、script脚本使用示例
1、计算两个字段的排序
$searchParams['body']['sort'] = [ "_script" => [ "script" => [ "inline" => "doc['zwk_zkrs'].value > 0 ? doc['zwk_hege'].value/doc['zwk_zkrs'].value : 0" ], "type" => "number", "order" => "desc", ] ];
2、计算两个字段的求和
$searchParams['body']['script_fields'] = [ "_script" => [ "script" => [ "source" => "doc['zwk_hege'].value + doc['zwk_hege'].value" ], "params" => [ "multiplier" => 2 ], ] ];
3、文档内容更新(指定如果文档不存在就应该先创建)
$searchParams = [ "_script" => [ "script" => [ "source" => "ctx._source.click_num+=1", "upsert" => [ "views" => 1 ] ] ] ];
四、使用说明
常用运算符和函数:
Integer, floating point, hex and octal literals
算数运算符: + - * / %
位运算符: | & ^ ~ << >> >>>
布尔运算符 (包含三元运算符): && || ! ?:
比较运算符: < <= == >= >
常用数学函数: abs ceil exp floor ln log10 logn max min sqrt pow
三角函数库函数: acosh acos asinh asin atanh atan atan2 cosh cos sinh sin tanh tan
示例:
a、如果字段缺失,会按照默认值0来计算,也可以使用: doc['myfield'].empty ? 100 : doc['myfield'].value
b、当字段是多值的时候,默认返回最小的值,可以选择别的值: doc['myfield'].sum().
c、布尔值字段暴率为数字,true 映射为1,false 映射为0.例如:doc['on_sale'].value ? doc['price'].value * 0.5 : doc['price'].value。
文档参考:https://www.jianshu.com/p/e2eaeb65af21