放置搜索应用程序编辑

此功能处于测试阶段,如有更改,恕不另行通知。其设计和代码不如正式的 GA 功能成熟,并按原样提供,不作任何保证。测试功能不受正式 GA 功能的支持 SLA 的约束。

创建或更新搜索应用程序。

请求编辑

PUT _application/search_application/<name>

先决条件编辑

需要 manage_search_application 集群权限。还需要对添加到搜索应用程序的所有索引的 管理权限

路径参数编辑

创建
(可选,布尔值)如果为 true,则此请求不能替换或更新现有的搜索应用程序。默认为 false
<body>

(必需,对象)包含搜索应用程序的参数

<body> 对象的属性
索引
(必需,字符串数组)与此搜索应用程序关联的 索引。所有索引都需要存在才能添加到搜索应用程序中。
模板

(可选,对象)与此搜索应用程序关联的 搜索模板。搜索应用程序的模板仅通过搜索应用程序存储和访问。

  • 此搜索模板必须是 Mustache 模板。
  • 该模板必须包含 Mustache 脚本和脚本源。
  • 可以通过后续的 放置搜索应用程序 请求修改模板。
  • 如果在创建搜索应用程序时未指定模板,或者从搜索应用程序中删除了模板,我们将使用模板示例中定义的 query_string 作为默认值。
  • 此模板将由 搜索应用程序搜索 API 用于执行搜索。
  • 该模板接受一个可选的 dictionary 参数,该参数定义了一个用于验证发送到 搜索应用程序搜索 API 的参数的 JSON 模式
<template> 的属性
脚本
(必需,对象)关联的 Mustache 模板。
字典
(可选,对象)用于验证与 搜索应用程序搜索 API 一起使用的参数的字典。该字典必须是有效的 JSON 模式。如果未指定 dictionary,则在应用于模板之前不会验证参数。

响应代码编辑

404
搜索应用程序 <name> 不存在。
409
搜索应用程序 <name> 存在,并且 createtrue

示例编辑

以下示例创建或更新名为 my-app 的新搜索应用程序

PUT _application/search_application/my-app
{
  "indices": [ "index1", "index2" ],
  "template": {
    "script": {
      "source": {
        "query": {
          "query_string": {
            "query": "{{query_string}}",
            "default_field": "{{default_field}}"
          }
        }
      },
      "params": {
        "query_string": "*",
        "default_field": "*"
      }
    },
    "dictionary": {
      "properties": {
        "query_string": {
          "type": "string"
        },
        "default_field": {
          "type": "string",
          "enum": [
            "title",
            "description"
          ]
        },
        "additionalProperties": false
      },
      "required": [
        "query_string"
      ]
    }
  }
}

指定上述 dictionary 参数后,搜索应用程序搜索 API 将执行以下参数验证

  • 它只接受 query_stringdefault_field 参数
  • 它验证 query_stringdefault_field 是否都是字符串
  • 它只接受值为 titledescriptiondefault_field

如果参数无效,则 搜索应用程序搜索 API 将返回错误。

POST _application/search_application/my-app/_search
{
  "params": {
    "default_field": "author",
    "query_string": "Jane"
  }
}

在上面的示例中,default_field 参数的值无效,因此 Elasticsearch 将返回错误

{
  "error": {
    "root_cause": [
      {
        "type": "validation_exception",
        "reason": 'Validation Failed: 1: $.default_field: does not have a value in the enumeration [title, description];',
        "stack_trace": ...
      }
    ],
    "type": "validation_exception",
    "reason": 'Validation Failed: 1: $.default_field: does not have a value in the enumeration [title, description];',
    "stack_trace": ...
  },
  "status": 400
}