一、作用:
通过使用脚本,可以在 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