検索アプリケーションの作成

この機能はベータ版であり、変更される可能性があります。デザインとコードは公式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> は存在し、createtrue です。

以下の例は、my-app という新しい検索アプリケーションを作成または更新します:

Python

  1. resp = client.search_application.put(
  2. name="my-app",
  3. search_application={
  4. "indices": [
  5. "index1",
  6. "index2"
  7. ],
  8. "template": {
  9. "script": {
  10. "source": {
  11. "query": {
  12. "query_string": {
  13. "query": "{{query_string}}",
  14. "default_field": "{{default_field}}"
  15. }
  16. }
  17. },
  18. "params": {
  19. "query_string": "*",
  20. "default_field": "*"
  21. }
  22. },
  23. "dictionary": {
  24. "properties": {
  25. "query_string": {
  26. "type": "string"
  27. },
  28. "default_field": {
  29. "type": "string",
  30. "enum": [
  31. "title",
  32. "description"
  33. ]
  34. },
  35. "additionalProperties": False
  36. },
  37. "required": [
  38. "query_string"
  39. ]
  40. }
  41. }
  42. },
  43. )
  44. print(resp)

Js

  1. const response = await client.searchApplication.put({
  2. name: "my-app",
  3. search_application: {
  4. indices: ["index1", "index2"],
  5. template: {
  6. script: {
  7. source: {
  8. query: {
  9. query_string: {
  10. query: "{{query_string}}",
  11. default_field: "{{default_field}}",
  12. },
  13. },
  14. },
  15. params: {
  16. query_string: "*",
  17. default_field: "*",
  18. },
  19. },
  20. dictionary: {
  21. properties: {
  22. query_string: {
  23. type: "string",
  24. },
  25. default_field: {
  26. type: "string",
  27. enum: ["title", "description"],
  28. },
  29. additionalProperties: false,
  30. },
  31. required: ["query_string"],
  32. },
  33. },
  34. },
  35. });
  36. console.log(response);

コンソール

  1. PUT _application/search_application/my-app
  2. {
  3. "indices": [ "index1", "index2" ],
  4. "template": {
  5. "script": {
  6. "source": {
  7. "query": {
  8. "query_string": {
  9. "query": "{{query_string}}",
  10. "default_field": "{{default_field}}"
  11. }
  12. }
  13. },
  14. "params": {
  15. "query_string": "*",
  16. "default_field": "*"
  17. }
  18. },
  19. "dictionary": {
  20. "properties": {
  21. "query_string": {
  22. "type": "string"
  23. },
  24. "default_field": {
  25. "type": "string",
  26. "enum": [
  27. "title",
  28. "description"
  29. ]
  30. },
  31. "additionalProperties": false
  32. },
  33. "required": [
  34. "query_string"
  35. ]
  36. }
  37. }
  38. }

上記の dictionary パラメータが指定されている場合、検索アプリケーション検索 API は次のパラメータ検証を実行します:

  • query_string および default_field パラメータのみを受け入れます
  • query_stringdefault_field が両方とも文字列であることを確認します
  • default_fieldtitle または description の値を取る場合にのみ受け入れます

パラメータが無効な場合、検索アプリケーション検索 API はエラーを返します。

Python

  1. resp = client.search_application.search(
  2. name="my-app",
  3. params={
  4. "default_field": "author",
  5. "query_string": "Jane"
  6. },
  7. )
  8. print(resp)

Js

  1. const response = await client.searchApplication.search({
  2. name: "my-app",
  3. params: {
  4. default_field: "author",
  5. query_string: "Jane",
  6. },
  7. });
  8. console.log(response);

コンソール

  1. POST _application/search_application/my-app/_search
  2. {
  3. "params": {
  4. "default_field": "author",
  5. "query_string": "Jane"
  6. }
  7. }

上記の例では、default_field パラメータの値が無効であるため、Elasticsearch はエラーを返します:

JSON

  1. {
  2. "error": {
  3. "root_cause": [
  4. {
  5. "type": "validation_exception",
  6. "reason": 'Validation Failed: 1: $.default_field: does not have a value in the enumeration [title, description];',
  7. "stack_trace": ...
  8. }
  9. ],
  10. "type": "validation_exception",
  11. "reason": 'Validation Failed: 1: $.default_field: does not have a value in the enumeration [title, description];',
  12. "stack_trace": ...
  13. },
  14. "status": 400
  15. }