すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:インデックススキーマ

最終更新日:Dec 28, 2024

概要

各ドキュメントには複数のフィールドが含まれており、各フィールドには一連の単語が含まれています。インデックスは、データの取得を高速化するために使用されます。インデックスは、マッピングに基づいて異なるタイプに分類できます。次のセクションでは、インデックスに関するいくつかの概念について説明します。

  • フィールド: フィールドの名前とタイプを使用して、インデックステーブルを定義できます。

  • 転置インデックス: インデックスは、単語からドキュメント内の場所へのマッピングを格納します。例: 単語 A: (Doc1,Doc2,...,DocN)。転置インデックスはデータの取得に使用され、検索するキーワードを含むドキュメントを見つけるのに役立ちます。

  • 順方向インデックス: インデックスは、ドキュメントからフィールドへのマッピングを格納します。例: DocID (term1,term2,...termn)。順方向インデックスは、単一値インデックスと複数値インデックスに分類できます。単一値インデックスには、単一値属性のみに属するデータ値が含まれています。データ値は、String タイプの値を除き、固定長です。これにより、データクエリが効率的になります。インデックスデータを更新することもできます。複数値属性は、フィールドに数量が固定されていない複数のデータが含まれていることを示します。これはクエリのパフォーマンスに悪影響を及ぼします。インデックスデータを更新することはできません。

    順方向インデックスは、ドキュメントIDに基づいてデータの属性を取得するために使用されます。属性は、統計、ソート、およびフィルタリングに使用できます。OpenSearch Retrieval Engine Edition は、順方向インデックスで次のデータ型のフィールドをサポートしています。

    INT8 (8 ビット符号付き整数型) および UINT8 (8 ビット符号なし整数型)

    INT16 (16 ビット符号付き整数型)

    UINT16 (16 ビット符号なし整数型)

    INTEGER (32 ビット符号付き整数型)

    UINT32 (32 ビット符号なし整数型) および INT64 (64 ビット符号付き整数型)

    UINT64 (64 ビット符号なし整数型)

    FLOAT (32 ビット浮動小数点数)

    DOUBLE (64 ビット浮動小数点数)

    STRING (文字列型)

  • サマリーインデックス: インデックスは、順方向インデックスと同様の方法でデータを格納します。ただし、サマリーインデックスは、フィールドからドキュメントへのマッピングを格納します。サマリーインデックスを使用すると、ドキュメントIDに基づいてコンテンツをすばやく見つけることができます。サマリーインデックスは、検索結果を表示するために使用されます。サマリーインデックスには、大量のデータが含まれています。クエリごとに、サマリーインデックスの過剰な量のデータを取得する必要はありません。代わりに、サマリーインデックスに基づいてドキュメントから検索結果を取得するだけで済みます。OpenSearch Retrieval Engine Edition は、サマリーインデックスの圧縮メカニズムを提供します。スキーマでサマリーインデックスの圧縮を有効にすると、OpenSearch Retrieval Engine Edition は zlib を使用してサマリーインデックスを圧縮し、圧縮されたサマリーインデックスを格納します。OpenSearch Retrieval Engine Edition がサマリーインデックスからデータを読み取ると、検索エンジンは圧縮されたサマリーインデックスを解凍し、取得した結果をユーザーに返します。

説明

インデックステーブルの設定方法の詳細については、インデックステーブルの設定を参照してください。

インデックススキーマのサンプル:

{
  "file_compress": [
    {
      "name": "file_compressor",
      "type": "zstd"
    },
    {
      "name": "no_compressor",
      "type": ""
    }
  ],
  "table_name": "test",
  "summarys": {
    "summary_fields": [
      "id",
      "fb_boolean",
      "fb_datetime",
      "fb_string",
      "fb_decimal",
      "fb_bigint",
      "fb_text"
    ],
    "parameter": {
      "file_compressor": "zstd"
    }
  },
  "indexs": [
    {
      "index_name": "id",
      "index_type": "PRIMARYKEY64",
      "index_fields": "id",
      "has_primary_key_attribute": true,
      "is_primary_key_sorted": false
    },
    {
      "index_name": "fb_boolean",
      "index_type": "STRING",
      "index_fields": "fb_boolean",
      "file_compress": "file_compressor",
      "format_version_id": 1
    },
    {
      "index_name": "fb_datetime",
      "index_type": "STRING",
      "index_fields": "fb_datetime",
      "file_compress": "file_compressor",
      "format_version_id": 1
    },
    {
      "index_name": "fb_string",
      "index_type": "STRING",
      "index_fields": "fb_string"
    },
    {
      "index_name": "fb_text",
      "index_type": "TEXT",
      "index_fields": "fb_text"
    }
  ],
  "attributes": [
    {
      "field_name": "id",
      "file_compress": "no_compressor"
    },
    {
      "field_name": "fb_boolean",
      "file_compress": "file_compressor"
    },
    {
      "field_name": "fb_datetime",
      "file_compress": "no_compressor"
    },
    {
      "field_name": "fb_string",
      "file_compress": "file_compressor"
    },
    {
      "field_name": "fb_decimal",
      "file_compress": "no_compressor"
    },
    {
      "field_name": "fb_bigint",
      "file_compress": "no_compressor"
    }
  ],
  "fields": [
    {
      "user_defined_param": {},
      "field_name": "id",
      "field_type": "INT64",
      "compress_type": "equal"
    },
    {
      "field_name": "fb_boolean",
      "field_type": "STRING",
      "compress_type": "uniq"
    },
    {
      "field_name": "fb_datetime",
      "field_type": "STRING",
      "compress_type": "uniq"
    },
    {
      "user_defined_param": {
        "multi_value_sep": ","
      },
      "field_name": "fb_string",
      "field_type": "STRING",
      "compress_type": "equal",
      "multi_value": true
    },
    {
      "field_name": "fb_decimal",
      "field_type": "DOUBLE"
    },
    {
      "field_name": "fb_bigint",
      "field_type": "INT64",
      "compress_type": "equal"
    },
    {
      "field_name": "fb_text",
      "field_type": "TEXT",
      "analyzer": "chn_standard"
    }
  ]
}

インデックステーブルを追加する

  1. インスタンスの詳細ページで、左側のナビゲーションペインの [構成センター] > [インデックススキーマ] を選択します。表示されるページで、インデックステーブルの作成をクリックします。

  1. インデックステーブルデータソース、およびデータシャードパラメーターを構成します。

  1. フィールドを構成します。

複数値フィールドを区切り文字で区切る:

OpenSearch Retrieval Engine Edition のデフォルトの区切り文字は ^] です。ビジネス要件に基づいて区切り文字をカスタマイズできます。

属性フィールドとフィールドデータを圧縮するかどうかを指定する:

  • 属性フィールド: デフォルトでは、属性フィールドは圧縮されません。属性フィールドに file_compressor が選択されている場合、属性フィールドは圧縮されます。

  • フィールドデータ: デフォルトでは、フィールドデータは圧縮されません。複数値フィールドまたは STRING タイプのフィールドの場合、デフォルトで uniq が選択されます。単一値フィールドの場合、デフォルトで equal が選択されます。

説明

属性フィールドを圧縮する場合は、パフォーマンスへの影響を軽減するために、インデックスのロード方法を変更することをお勧めします。インデックスのロード方法を変更するには、次の操作を実行します。インスタンスのインスタンスの詳細ページで、左側のナビゲーションペインの [デプロイメント管理] をクリックします。表示されるページで、管理する Searcher ワーカーをクリックします。[Searcher ワーカーの構成] パネルで、[オンライントランザクションの構成] タブをクリックします。

  1. インデックスを構成します。

インデックスフィールドを圧縮するかどうかを指定する:

  • デフォルトでは、インデックスフィールドは圧縮されません。インデックスフィールドに file_compressor が選択されている場合、インデックスフィールドは圧縮されます。

説明
  • プライマリキーインデックスは圧縮できません。

  • インデックスフィールドを圧縮する場合は、パフォーマンスへの影響を軽減するために、インデックスのロード方法を変更することをお勧めします。インデックスのロード方法を変更するには、次の操作を実行します。インスタンスのインスタンスの詳細ページで、左側のナビゲーションペインの [デプロイメント管理] をクリックします。表示されるページで、管理する Searcher ワーカーをクリックします。[Searcher ワーカーの構成] パネルで、[オンライントランザクションの構成] タブをクリックします。

  1. 構成が完了したら、[バージョンの保存] をクリックします。表示されるダイアログボックスで、説明を入力し、公開をクリックします。説明はオプションです。

  1. インデックステーブルが追加された後、左側のナビゲーションペインで [O&M センター] > [デプロイメント管理] を選択し、表示されるページでトポロジを表示できます。

  1. 新しいインデックステーブルをクラスターで有効にするには、次の操作を実行します。左側のナビゲーションペインで、[O&M センター] > [O&M 管理] を選択します。表示されるページで、[構成の更新] をクリックします。[インスタンス構成の更新] パネルで、[再インデックス化のトリガー] パラメーターを [構成のプッシュと再インデックス化のトリガー] に設定します。

  1. 再インデックス化中に、左側のナビゲーションペインで [O&M センター] > [変更履歴] を選択し、データソースの変更タブをクリックして、再インデックス化タスクの進捗状況を表示できます。

再インデックス化タスクが完了すると、新しいインデックステーブルからデータをクエリできます。

重要
  • プライマリキーフィールドは 1 つだけ指定できます。

  • フィールド設定では、少なくとも 1 つのフィールドに対して [検索結果の表示] を選択する必要があります。

  • TEXT タイプのフィールドの場合、分析方法を設定する必要があります。複数値フィールドはサポートされていません。

  • プライマリキーインデックスは 1 つだけ指定できます。

  • デフォルトの区切り文字に加えて、複数値フィールドを区切るために使用される区切り文字は、単一文字のみ可能です。全角文字はサポートされていません。

  • クラスター内のレプリカ数が 2 の場合、[データシャード] パラメーターを 2 に設定します。インスタンスを購入する際は、Searcher ワーカーの数が、レプリカ数にデータシャード数を掛けた数よりも大きいことを確認してください。そうでない場合、追加したインデックステーブルは使用できません。

  • 単一シャードには最大 6 億個のデータを含めることができ、すべてのデータシャードには合計で最大 21 億個のデータを含めることができます。単一シャードのインデックスサイズは 300 GB を超えることはできません。データをリアルタイムで更新する必要がある場合、単一シャードでのデータ更新の 1 秒あたりのトランザクション数 (TPS) は 4,000 を超えることはできません。add コマンドを実行してドキュメントを追加する場合、更新 TPS は 10,000 に達する可能性があります。

インデックステーブルを変更する

インデックステーブルのバージョン:

デフォルトでは、新しいインデックステーブルでは 2 つのバージョンが使用可能です。

  • index_config_v1: 初めて構成するインデックステーブル。構成をプッシュしてインデックスを再構築した場合、インデックステーブルのステータスは [使用中] に変わります。構成をプッシュしていないか、インデックスを再構築していない場合、インデックステーブルのステータスは [未使用] に変わります。

  • index_config_edit: 変更中のインデックステーブル。インデックステーブルは [変更中] 状態です。

インデックステーブルのバージョンが連続して公開されている場合、バージョン番号は増分されます。たとえば、2 番目のバージョンは index_config_v2 という名前で、3 番目のバージョンは index_config_v3 という名前です。インデックステーブルのバージョンを区別するには、各バージョンの説明を入力する必要があります。

新しいインデックステーブルのバージョンを変更して公開する:

  1. [変更中] 状態のバージョンを見つけて、[変更] をクリックします。

説明

cluster.json 構成:

OpenSearch Retrieval Engine Edition インスタンスでは、インデックスマージを使用して customized_merge_config キーと segment_customize_metrics_updater キーを構成できます。新しいインスタンスのみが segment_customize_metrics_updater キーをサポートしています。

  1. 変更後、[バージョンの保存] をクリックします。

開発者モードに切り替えて、スキーマを手動で変更することもできます。

  1. [変更中] 状態のバージョンを見つけて、[公開] をクリックし、説明を入力します。次に、OK をクリックします。

この手順では、システムはインデックステーブルの新しいインデックステーブルバージョンを生成します。インデックステーブルのバージョンは [未使用] 状態です。

  1. 新しいインデックステーブルをクラスターで有効にするには、次の操作を実行します。左側のナビゲーションペインで、[O&M センター] > [O&M 管理] を選択します。表示されるページで、[構成の更新] をクリックします。[インスタンス構成の更新] パネルで、[再インデックス化のトリガー] パラメーターを構成のプッシュと再インデックス化のトリガーに設定します。

インデックステーブルのバージョンを削除する:

[未使用] 状態のインデックステーブルのバージョンを削除できます。

インデックステーブルのバージョンを表示する:

[表示] をクリックして、インデックステーブルのバージョンの構成ページに移動します。ページには読み取り専用権限があります。

  • 管理者モード

  • 開発者モード

インデックステーブルを削除する

[使用中] 状態のバージョンが含まれていないインデックステーブルを削除できます。

インデックステーブルに [使用中] 状態のバージョンが含まれている場合、

次の手順を実行してのみインデックステーブルを削除できます。

  1. 左側のナビゲーションペインで、[O&M センター] > [デプロイメント管理] を選択します。表示されるページで、削除するインデックステーブルをクリックします。表示されるパネルで、[有効なオンライン] タブの [登録解除] をクリックします。

  2. 次に、左側のナビゲーションペインで [構成センター] > [インデックススキーマ] を選択します。表示されるページで、削除するインデックステーブルを見つけて、[アクション] 列の [削除] をクリックします。

警告

デプロイメント管理ページでインデックステーブルの登録を解除する場合は、インデックススキーマからインデックステーブルを削除する必要があります。そうでない場合、オンラインクラスターのクエリパフォーマンスに影響する可能性があります。

使用上の注意

  • インデックステーブルを追加する場合は、データソースを指定する必要があります。データソースが存在しない場合は、インデックステーブルを追加する前にデータソースを追加する必要があります。

  • インデックステーブルを作成した後、インデックステーブル名を変更することはできません。

  • インデックステーブルに [使用中] 状態のバージョンが含まれている場合、インデックステーブルを削除することはできません。

  • 各インデックステーブルには、[変更中] 状態のバージョンを 1 つだけ含めることができます。