创建搜索应用程序
编辑创建搜索应用程序
编辑此功能为 Beta 版,可能会发生更改。其设计和代码不如正式 GA 功能成熟,按原样提供,不提供任何保证。Beta 版功能不受正式 GA 功能的支持 SLA 约束。
创建或更新搜索应用程序。
请求
编辑PUT _application/search_application/<name>
路径参数
编辑-
create
- (可选,布尔值)如果为
true
,则此请求不能替换或更新现有的搜索应用程序。默认为false
。 -
<body>
-
(必需,对象)包含搜索应用程序的参数
<body>
对象的属性-
indices
- (必需,字符串数组)与此搜索应用程序关联的 索引。所有索引都需要存在才能添加到搜索应用程序中。
-
template
-
(可选,对象)与此搜索应用程序关联的 搜索模板。搜索应用程序的模板仅存储并通过搜索应用程序访问。
- 此搜索模板必须是 Mustache 模板。
- 该模板必须包含 Mustache 脚本和脚本源。
- 可以使用后续的 创建搜索应用程序 请求修改模板。
- 如果在创建搜索应用程序时未指定模板,或者如果从搜索应用程序中删除了模板,我们将使用模板示例中定义的 query_string 作为默认值。
- 此模板将由 搜索应用程序搜索 API 用于执行搜索。
- 该模板接受一个可选的
dictionary
参数,该参数定义一个 JSON 模式,用于验证发送到 搜索应用程序搜索 API 的参数。
<template>
的属性-
script
- (必需,对象)关联的 Mustache 模板。
-
dictionary
- (可选,对象)用于验证与 搜索应用程序搜索 API 一起使用的参数的字典。该字典必须是有效的 JSON 模式。如果未指定
dictionary
,则在将参数应用到模板之前不会对其进行验证。
-
响应代码
编辑-
404
- 搜索应用程序
<name>
不存在。 -
409
- 搜索应用程序
<name>
存在,并且create
为true
。
示例
编辑以下示例创建或更新名为 my-app
的新搜索应用程序
resp = client.search_application.put( name="my-app", search_application={ "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" ] } } }, ) print(resp)
const response = await client.searchApplication.put({ name: "my-app", search_application: { 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"], }, }, }, }); console.log(response);
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_string
和default_field
参数 - 它验证
query_string
和default_field
都是字符串 - 它仅当
default_field
的值为title
或description
时才接受它
如果参数无效,则 搜索应用程序搜索 API 将返回错误。
resp = client.search_application.search( name="my-app", params={ "default_field": "author", "query_string": "Jane" }, ) print(resp)
const response = await client.searchApplication.search({ name: "my-app", params: { default_field: "author", query_string: "Jane", }, }); console.log(response);
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 }