脚本处理器

脚本处理器(Script Processor) #

版本引入:1.14.0

script 搜索请求处理器用于拦截搜索请求,并在请求中添加一个内联的 Painless 脚本,该脚本会在接收到请求时执行。脚本仅能操作以下请求字段:

  • from
  • size
  • explain
  • version
  • seq_no_primary_term
  • track_scores
  • track_total_hits
  • min_score
  • terminate_after
  • profile

请求体字段 #

下表列出了该处理器支持的所有配置字段。

字段数据类型说明
source内联脚本要执行的脚本代码。必填
lang字符串脚本语言。可选,默认为 painless,目前仅支持 painless
tag字符串处理器的唯一标识符,用于调试或跟踪。可选。
description字符串对该处理器的描述信息。可选。
ignore_failure布尔值若为 true,当此处理器执行失败时,Easysearch 将忽略错误并继续执行后续处理器。可选,默认值为 false

示例 #

以下请求创建一个名为 explain_one_result 的搜索管道,其中包含一个 script 请求处理器。该脚本的作用是:当请求返回多个结果时自动关闭 explain 功能,因为 explain 是一项开销较大的操作;仅在返回单个结果时启用。

PUT /_search/pipeline/explain_one_result
{
  "description": "一个仅对单个结果启用 explain 操作的搜索管道",
  "request_processors": [
    {
      "script": {
        "lang": "painless",
        "source": "if (ctx._source['size'] > 1) { ctx._source['explain'] = false } else { ctx._source['explain'] = true }"
      }
    }
  ]
}

说明 #

  • ctx._source 表示当前搜索请求的请求体内容。
  • 上述脚本逻辑为:如果 size(返回结果数量)大于 1,则设置 "explain": false,否则设置为 true
  • 这样可以避免在大量结果上执行高开销的评分解释(explain),从而提升性能。

使用搜索管道 #

在搜索请求中通过 search_pipeline 参数指定该管道:

GET /my_index/_search?search_pipeline=explain_one_result
{
  "query": {
    "match": {
      "message": "public"
    }
  },
  "size": 1
}