検索アプリケーションの作成
この機能はベータ版であり、変更される可能性があります。デザインとコードは公式GA機能よりも成熟しておらず、保証なしでそのまま提供されています。ベータ機能は公式GA機能のサポートSLAの対象外です。
検索アプリケーションを作成または更新します。
リクエスト
PUT _application/search_application/<name>
前提条件
manage_search_application
クラスター権限が必要です。また、検索アプリケーションに追加されるすべてのインデックスに対して 管理権限 が必要です。
パスパラメータ
create
- (オプション、ブール値)
true
の場合、このリクエストは既存の検索アプリケーションを置き換えたり更新したりできません。デフォルトはfalse
です。 <body>
- (必須、オブジェクト)検索アプリケーションのパラメータを含みます:
<body>
オブジェクトのプロパティindices
- (必須、文字列の配列)この検索アプリケーションに関連付けられた インデックス。すべてのインデックスは、検索アプリケーションに追加されるために存在する必要があります。
template
- (オプション、オブジェクト)この検索アプリケーションに関連付けられた 検索テンプレート。検索アプリケーションのテンプレートは、検索アプリケーションを通じてのみ保存され、アクセス可能です。
- この検索テンプレートは Mustache テンプレートでなければなりません。
- テンプレートには Mustache スクリプトとスクリプトソースが含まれている必要があります。
- テンプレートは、後続の 検索アプリケーションの作成 リクエストで変更できます。
- 検索アプリケーションを作成する際にテンプレートが指定されていない場合、または検索アプリケーションからテンプレートが削除された場合、テンプレートの例で定義された query_string をデフォルトとして使用します。
- このテンプレートは、検索アプリケーション検索 API によって検索を実行するために使用されます。
- テンプレートは、検索アプリケーション検索 API に送信されるパラメータを検証するために使用される JSON スキーマ を定義するオプションの
dictionary
パラメータを受け入れます。<template>
のプロパティ
script
- (必須、オブジェクト)関連する Mustache テンプレート。
dictionary
- (オプション、オブジェクト)検索アプリケーション検索 API で使用されるパラメータを検証するために使用される辞書。辞書は有効な JSON スキーマでなければなりません。
dictionary
が指定されていない場合、パラメータはテンプレートに適用される前に検証されません。
レスポンスコード
404
- 検索アプリケーション
<name>
は存在しません。 409
- 検索アプリケーション
<name>
は存在し、create
はtrue
です。
例
以下の例は、my-app
という新しい検索アプリケーションを作成または更新します:
Python
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)
Js
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 はエラーを返します。
Python
resp = client.search_application.search(
name="my-app",
params={
"default_field": "author",
"query_string": "Jane"
},
)
print(resp)
Js
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 はエラーを返します:
JSON
{
"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
}