インデックステーブル構造
各ドキュメントには複数のフィールドが含まれており、各フィールドはタームの集合を保持します。インデックスの主な目的は、検索を高速化することです。
-
フィールド:インデックステーブル内のフィールドの名前と型を定義します。
-
転置インデックス:転置インデックスは、特定のキーワードを含むドキュメントを迅速に検索するために使用されます。
-
フォワードインデックス (属性):ドキュメント ID からフィールドへのマッピングを格納します (例:
DocID --> (term1, term2, ..., termN))。フォワードインデックスは、単一値または複数値です。単一値属性は固定長 (STRING 型を除く) であり、高性能な検索をサポートし、更新が可能です。複数値属性は、フィールドに可変数の項目を格納するため、単一値属性よりも検索速度が遅く、更新はサポートされていません。フォワードインデックスは通常、ドキュメントが検出された後に、統計、ソート、フィルタリングのためにその属性値を迅速に取得するために使用します。フォワードインデックスでサポートされる基本的なフィールド型には、次のものがあります。
INT8 (8 ビット符号付き整数)、UINT8 (8 ビット符号なし整数)、
INT16 (16 ビット符号付き整数)、
UINT16 (16 ビット符号なし整数)、
INTEGER (32 ビット符号付き整数)、
UINT32 (32 ビット符号なし整数)、INT64 (64 ビット符号付き整数)、
UINT64 (64 ビット符号なし整数)、
FLOAT (32 ビット浮動小数点数)、
DOUBLE (64 ビット浮動小数点数)、
STRING (文字列)
-
サマリー:サマリーは、属性と同様の形式で格納されます。ただし、サマリーは単一のドキュメントに対して複数のフィールドをまとめて格納し、マッピングを作成することで、docid から対応するサマリーコンテンツを迅速に取得できます。サマリーは主に結果の表示に使用します。サマリーコンテンツは一般的に大きいため、クエリごとに取得するサマリーの数を多くしすぎないことを推奨します。結果を表示する必要があるドキュメントのサマリーのみを取得してください。サイズが大きいため、エンジンはサマリーの圧縮メカニズムを提供しています。スキーマでサマリー圧縮を構成すると、エンジンは保存前に
zlibを使用してサマリーを圧縮します。サマリーを読み取る際、エンジンはまず解凍してから返します。
インデックステーブル構成の詳細については、「インデックステーブル構成」をご参照ください。
インデックススキーマの例:
{
"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"
}
]
}
インデックステーブルの追加
-
インスタンス管理ページで、 [構成センター] > [インデックス構造] へ移動し、 [インデックステーブルの追加] をクリックします。
-
[インデックステーブル] を構成し、 [データソース] を選択して、 [データシャード] を設定します。
[インデックステーブル] セクションで、インデックステーブル名を設定します。[データソース] セクションで、構成済みのデータソースを選択します。[データシャード] セクションで、シャード数を設定します。[テンプレートの選択] 領域では、 [汎用テンプレート] 、 [ベクトル:画像検索] 、または [ベクトル:テキストセマンティック検索] テンプレートを選択できます。
-
フィールドを構成します。フィールド構成領域では、各フィールドの名前と型、複数値フィールドかどうか、属性フィールドかどうか、インデックス型とアナライザーの設定などのプロパティを構成できます。
複数値フィールドの区切り文字設定:
デフォルトでは、HA3 の区切り文字 ^] が使用されます。ビジネスニーズに応じて、区切り文字をカスタマイズすることもできます。
属性とフィールドコンテンツの圧縮:
-
属性フィールドの圧縮を有効または無効にできます。デフォルトでは圧縮は無効です。圧縮を有効にするには、
file_compressorを選択します。 -
フィールドコンテンツの圧縮を有効または無効にできます。デフォルトでは圧縮は無効です。デフォルトでは、複数値および STRING 型には
uniqが設定され、単一値の数値型にはequalが設定されます。
属性圧縮を有効にする場合は、 [デプロイ管理] > [データノード] > [オンラインテーブル構成] でインデックスの読み込み方法を編集して、パフォーマンスへの影響を軽減することを推奨します。
インデックス設定は、次の列を持つテーブルに表示されます: [インデックス名] 、 [インデックス型] (PRIMARYKEY64、STRING、TEXT など) 、 [含まれるフィールド] 、 [データ圧縮] (圧縮済み / 未圧縮) 、 [詳細設定] ( [表示/変更] ) 、および [操作] ( [削除] )。下部の [+] ボタンをクリックして、新しいインデックスを追加できます。
インデックスフィールドの圧縮設定:
-
インデックスフィールドを圧縮するかどうかを選択できます。デフォルトでは圧縮は無効です。圧縮を有効にするには、
file_compressorを選択します。
-
プライマリキーインデックスは圧縮をサポートしていません。
-
インデックス圧縮を有効にする場合は、 [デプロイ管理] > [データノード] > [オンラインテーブル構成] でインデックスの読み込み方法を編集して、パフォーマンスへの影響を軽減することを推奨します。
-
構成が完了したら、 [バージョンの保存] をクリックします。表示されたダイアログボックスで、備考 (任意) を入力し、 [公開] をクリックします。
この例では、インデックステーブル名を vector_index に設定し、編集モードを[管理者モード]にします。フィールド設定では、2 つのフィールドを追加します:id (INT64 型、プライマリキーとして設定、 [属性フィールド] および [検索結果に表示] オプションを選択) と embedding (STRING 型、 [検索結果に表示] オプションを選択)。
-
インデックステーブルが正常に追加されると、 [デプロイ管理] でそのトポロジを表示できます。
トポロジ図は、トップダウンアーキテクチャを示しています: [クエリサービス] がクラスタに接続し (各クラスタには [データノード] と [クエリノード] が含まれます)、クラスタが [インデックステーブル] に接続し、インデックステーブルが [データソース] に接続します。矢印は各レイヤー間のデータフローを示しています。
-
新しいインデックステーブルをクラスタに適用するには、 [運用保守管理] で構成の更新とフルインデックス作成を手動でトリガーする必要があります。[構成の更新] 操作で、 [設定をプッシュしてインデックス再構築をトリガー] を選択します。
[構成タイプ] で [オフライン構成] を選択します。[インデックス構造バージョン] 領域で、対象のデータソースを選択し、対応するインデックステーブルとそのバージョンを選択し、必要に応じて [辞書構成バージョン] 、 [オフライン構成バージョン] 、および [オフラインプラグインバージョン] を選択します。その後、 [OK] をクリックします。
[データソース構成バージョン] を選択し、 [対象クラスタ] を選択し、 [設定をプッシュしてインデックス再構築をトリガー] を選択してから、 [OK] をクリックします。
-
インデックス再構築中、 [変更履歴] の [データソースの変更] でフルインデックス作成の進行状況を監視できます。
各ステージの現在の実行ステータスがアイコンで示されます。
インデックス再構築が完了すると、新しいインデックステーブルをクエリできます。
-
フィールド設定には、プライマリキーを 1 つだけ含める必要があります。
-
フィールド設定では、少なくとも 1 つのフィールドを検索結果に表示するように選択する必要があります。
-
TEXT フィールドにはアナライザーが必要で、複数値はサポートされていません。
-
インデックス設定には、プライマリキーインデックスを 1 つだけ含める必要があります。
-
デフォルトの区切り文字に加えて、カスタム複数値区切り文字は単一文字である必要があり、全角文字は使用できません。
-
データシャード数を設定する際は、 [データノード数] がレプリカ数とデータシャード数の積を超えるようにしてください。たとえば、2 つのレプリカと 2 つのデータシャードを持つクラスタでは、4 つを超えるデータノードが必要です。
-
シャード数を設定する際は、次のルールに従ってください:単一シャードには 6 億件を超えるドキュメントを含めないでください (最大 21 億件)。単一シャードのインデックスサイズは 300 GB を超えないようにしてください。リアルタイム更新が必要な場合、単一シャードでのデータ更新のトランザクション/秒 (TPS) は、
addコマンドで 4,000 を超えないようにしてください。updateコマンドの場合、TPS は最大 10,000 になります。
インデックステーブルの編集
インデックステーブルバージョンの概要:
新しく作成されたインデックステーブルには、2 つのデフォルトバージョンがあります。
-
index_config_v1:インデックステーブルの初期バージョンです。構成をプッシュしてインデックス再構築を完了すると、ステータスが「使用中」に変わります。それ以外の場合、ステータスは「未使用」です。 -
index_config_edit:現在編集中のバージョンです。ステータスは常に「編集中」です。
新しいバージョンを公開すると、バージョン名は順次増加します (例:index_config_v2、index_config_v3など)。バージョンを明確に区別するために、各バージョンに備考が必要です。
新しいインデックステーブルバージョンの編集と公開:
-
ステータスが「編集中」のバージョンを見つけて、 [編集] をクリックします。
index_config_editバージョンの行を展開して、ファイル名リストでtest_main_schema.jsonを見つけて、その行の[編集]をクリックします。
cluster.json 構成に関する追加情報:
プラットフォームでは、インデックスマージ戦略を構成できます。customized_merge_configとsegment_customize_metrics_updater(新しいインスタンスでのみサポート) を構成できます。
左側メニューで、 [構成センター] > [インデックス構造] を選択します。main_cluster.jsonファイルを開き、キーと値のテーブルでcustomized_merge_config構成項目を見つけて、 [操作] 列の [編集] をクリックします。
パラメータの詳細については、「オフラインクラスタ構成」をご参照ください。
-
変更後、 [バージョンの保存] をクリックします。
[管理者モード] のインデックス構造エディタ (main_index_schema.json) では、 [フィールド設定] セクションで、フィールド名、フィールド型、プライマリキー、複数値、アナライザー、属性フィールド、検索結果に表示などのプロパティを構成できます。[インデックス設定] セクションでは、インデックス名、インデックス型、含まれるフィールドを管理できます。
[開発者モード] に切り替えて、スキーマを手動で編集することもできます。
[開発者モード] の JSON エディタでは、summarys セクションで compress を false に設定し、summary_fields には 5 つのフィールド (id、age、name、address、info) が含まれ、indexs 配列は 3 つのインデックスを定義します:name (型 STRING)、address (型 STRING)、info (型 TEXT)。編集が完了したら、 [バージョンの保存] をクリックします。
-
ステータスが「編集中」のバージョンを見つけて、 [公開] をクリックし、 [備考] を入力して、 [OK] をクリックします。
システムは、ステータスが「未使用」の新しいインデックステーブルバージョンを生成します。
-
新しいインデックステーブルバージョンをクラスタに適用するには、 [運用保守管理] > [構成の更新] で [設定をプッシュしてインデックス再構築をトリガー] を選択する必要があります。
[構成の更新] ページで、 [構成タイプ] に [オフライン構成] を選択します。[インデックス構造バージョン] セクションで、対象のインデックステーブルとプッシュするバージョン (例:index_config_v4) を選択します。[インデックス再構築をトリガーするかどうか] で、 [設定をプッシュしてインデックス再構築をトリガー] を選択してから、 [OK] をクリックします。
インデックステーブルバージョンの削除:
ステータスが「未使用」のインデックステーブルバージョンは、直接削除できます。
確認ダイアログで、削除を確定します。この操作は元に戻せないことに注意して、 [OK] をクリックします。
インデックステーブルバージョンの表示:
[表示] をクリックすると、インデックステーブルバージョンの読み取り専用構成ページにリダイレクトされます。
管理者モードでは、[フィールド設定] セクションにインデックス テーブルのフィールド構成が表形式で表示されます。列には[フィールド名]、[フィールドタイプ]、[プライマリキー]、[複数値]、[属性フィールド]、[検索結果に表示]、[データ圧縮]、[分析方法]、および[詳細設定]があり、各フィールドの定義の概要を明確に把握できます。
-
開発者モード。
[開発者モード] では、インデックステーブルバージョンが行番号付きのエディタに JSON 形式で表示されます。JSON 構造には、indexs (インデックス定義、例:PRIMARYKEY64 プライマリキーインデックス、index_fields や is_primary_key_sorted などのパラメータを含む)、attributes (属性のリスト)、および fields (フィールド定義。各フィールドは field_name と field_type を指定。例:INT64 または STRING) が含まれます。
インデックステーブルの削除
インデックステーブルにステータスが「使用中」のバージョンがない場合は、直接削除できます。
インデックステーブルのインデックス構造ページで、インデックステーブル名の横にある [削除] リンクをクリックして削除します。
インデックステーブルにステータスが「使用中」のバージョンがある場合:
-
[デプロイ管理] で、インデックステーブルをクリックして、登録を解除します。
対象のインデックス テーブルを選択します。表示されたパネルで、[オンライン] タブを選択し、[サブスクリプションステータス] 行の [アクション] 列にある [サブスクライブ解除] をクリックします。
-
次に、 [構成センター] > [インデックス構造] で、対象のインデックステーブル名の横にある [削除] リンクをクリックして、対応するインデックステーブルを削除します。
デプロイ管理でインデックステーブルの [登録解除] を行った場合は、オンラインクラスタの中断を避けるために、インデックス構造で対応するインデックステーブルを削除する必要があります。
注意事項
-
インデックステーブルを追加するには、データソースが必要です。データソースがない場合は、まずデータソースを追加してから、インデックステーブルを追加してください。
-
インデックステーブル名は、作成後に変更できません。
-
ステータスが「使用中」のバージョンがあるインデックステーブルは、直接削除できません。
-
各インデックステーブルは、「編集中」ステータスのバージョンを 1 つだけ保持できます。