Object Storage Service (OSS) を使用して、バケットに保存されている HA3 または JSON ファイルからフルインデックスを構築し、インデックスが有効になった後に API を使用して増分更新を行います。
| メソッド | 役割 | 使用タイミング |
|---|---|---|
| OSS フルインポート | インデックス作成時にすべてのレコードを一度にロードします | インデックスの初期ビルドまたはフルリビルド |
| API 増分更新 | インデックスが有効になった後にレコードを追加、変更、または削除します | 継続的なデータ変更 |
OSS とご利用の OpenSearch Vector Search Edition インスタンスは、同じリージョンにある必要があります。リージョンが一致しない場合、データソース接続は失敗します。
設定は2つのパートに分かれています。まず OSS を準備し、次にテーブルを作成する際にデータソースとして接続します。
前提条件
開始する前に、以下が準備できていることを確認してください。
-
OSS が有効化された Alibaba Cloud アカウント
-
購入済みの Vector Search Edition インスタンス (詳細については、「Vector Search Edition インスタンスの購入」をご参照ください)
-
UTF-8 でエンコードされ、HA3 または JSON 形式のデータファイル
ステップ 1:OSS の準備
OSS の有効化
ご利用の OpenSearch インスタンスと同じリージョンで OSS を有効化します。
バケットの作成
-
OSS 管理コンソール > [バケット] > [バケットの作成] に移動します。
OSS 管理コンソールの左側のナビゲーションウィンドウで、[バケット] をクリックし、[バケットの作成] をクリックします。
-
バケットの作成後、[バケット設定] > [バケットのタグ付け] > [タグの作成] を選択して、OpenSearch タグを追加します。
タグキー (Key) とタグ値 (Value) の両方を
opensearchに設定します。
データファイルの準備
アップロードする前に、ファイルがこれらの要件を満たしている必要があります。
| 要件 | 詳細 |
|---|---|
| エンコーディング | UTF-8 |
| フォーマット | HA3 または JSON |
| 場所 | バケットのルートディレクトリではなく、フォルダ内にある必要があります |
JSON フォーマット
各行が1つの JSON ドキュメントです。複数行の JSON はサポートされていません。
| ルール | 詳細 |
|---|---|
| 1行につき1レコード | 各 JSON オブジェクトは1行に収める必要があります |
| 行区切り文字 | \n で区切ります。JSON 値の内部に \n を含めることはできません |
| 混合ファイルなし | ディレクトリには JSON データファイルのみを含める必要があります |
| 値の型 | すべての JSON 値は文字列です。スキーマはインデックス構築中にそれらを正しい型に変換します |
例:
{"field_double": ["100.0", "221.123", "500.3333333"], "field_int32": ["100", "200", "300"], "title": "Huawei Mate 9 Kirin 960 chip Leica dual camera", "color": "Red", "empty_int32": "", "price": "3599", "CMD": "add", "nid": "1", "gather_cn_str": "", "desc": ["str1", "str2", "str3"], "brand": "Huawei", "size": "5.9","__subdocs__":[{"sub_pk":"100","sub_field1":"200","sub_field2":["100","200","300"]},{"sub_pk":"200","sub_field1":"200","sub_field2":["100","200","300"]}]}
{"field_double": ["100.0", "221.123", "500.3333333", "100.0", "221.123", "500.3333333"], "field_int32": ["100", "200", "300", "100", "200", "300"], "title": "Huawei/Huawei P10 Plus full network phone", "color": "Blue", "empty_int32": "", "price": "4388", "CMD": "add", "nid": "2", "gather_cn_str": "colorBlue", "desc": ["str1", "str2", "str3", "str1", "str2", "str3"], "brand": "Huawei", "size": "5.5","__subdocs__":[{"sub_pk":"100","sub_field1":"200","sub_field2":["100","200","300"]},{"sub_pk":"200","sub_field1":"200","sub_field2":["100","200","300"]}]}
HA3 フォーマット
HA3 ファイルはバイナリ区切り文字を使用します。各ファイルには add コマンドと delete コマンドのシーケンスが含まれています。
ファイル区切り文字
| C++ エンコーディング | ASCII 16進数 | 説明 | 表示 (emacs/vi) | emacs での入力 | vi での入力 |
|---|---|---|---|---|---|
"\x1F\n" |
1F0A | キーと値の区切り文字 | ^_ (改行が続く) |
C-q C-7 | C-v C-7 |
"\x1E\n" |
1E0A | コマンド区切り文字 | ^^ (改行が続く) |
C-q C-6 | C-v C-6 |
"\x1D" |
1D | 複数値の区切り文字 | ^] |
C-q C-5 | C-v C-5 |
"\x1C" |
1C | セクションの重みフラグ | ^\ |
C-q C-4 | C-v C-4 |
"\x1D" |
1D | セクション区切り文字 | ^] |
C-q C-5 | C-v C-5 |
"\x03" |
03 | サブドキュメントのフィールド区切り文字 | ^C |
C-q C-c | C-v C-c |
コマンドフォーマット
-
add コマンド:最初の行は
CMD=addである必要があります。スキーマで定義されたすべてのフィールドを任意の順序で含めます。CMD=add^_ PK=12345321^_ url=http://www.aliyun.com/index.html^_ title=Alibaba Cloud Computing Co., Ltd.^_ body=xxxxxx xxx^_ time=3123423421^_ multi_value_field=1234^]324^]342^_ bidwords=mp3^\price=35.8^Ptime=13867236221^]mp4^\price=32.8^Ptime=13867236221^_ ^^ -
delete コマンド:最初の行は
CMD=deleteである必要があります。プライマリキーフィールドとパーティションハッシュフィールドを含めます。両方が同じフィールドである場合は、一度だけ含めます。CMD=delete^_ PK=12345321^_ ^^
バケットへのファイルのアップロード
データファイルは、ルートディレクトリではなく、バケット内のフォルダに配置します。バケットの構造は次のようになります。
<your-bucket-name>/
└── <your-data-folder>/
├── data_file_1.json
├── data_file_2.json
└── ...
アップロードするには:
-
OSS 管理コンソールで、ご利用のバケットを開きます。
-
左側のナビゲーションウィンドウで、[オブジェクト管理] > [オブジェクト] を選択します。
-
[オブジェクトのアップロード] をクリックし、ファイルを選択して、確認します。
アップロードが完了すると、[タスクリスト] パネルのファイルステータスに [アップロード成功] と表示されます。
ステップ 2:OSS + API データソースの追加
基本テーブル情報の設定
-
インスタンス一覧で、お使いの Vector Search Edition インスタンスを見つけ、[操作] 列の[管理]をクリックします。
-
左側のナビゲーションウィンドウで、[テーブル管理] > [テーブルの追加] を選択します。
-
テーブルの基本情報を入力し、[次へ] をクリックします。
フィールド 説明 テーブル名 このテーブルのカスタム名です。 データシャード数 正の整数で、最大値は 256 です。 シャード数が多いほど、フルビルドの速度と単一クエリのパフォーマンスが向上します。 データ更新リソース数 増分データ更新に使用されるリソースです。 各インデックスには、デフォルトで 2 つの無料の 4 コア 8 GB の更新リソースが含まれています。 追加のリソースは課金されます。 詳細については、「Vector Search Edition の課金」をご参照ください。 シナリオテンプレート 次のいずれかを選択します: 汎用テンプレート、ベクトル: Image Search テンプレート、または ベクトル: テキストセマンティック検索テンプレート [ベクター: Image Search] テンプレートを選択した後、取得メソッドとして [デンスベクター取得] または [デンス & スパースベクターハイブリッド取得] を選択します。
データ同期の設定
-
[フルデータソース] には、 [Object Storage Service (OSS) + API] を選択します。
-
OSS の接続詳細を入力し、[データソースの検証] をクリックします。
フィールド 説明 OSS パス データファイルを含むフォルダへのパスです。 /で始まる必要があります。?、=、または&を含めることはできません。ファイルはフォルダ内にある必要があります — ルートディレクトリはサポートされていません。OSS バケット OSS バケットの名前 データフォーマット アップロードしたファイルに合わせて [HA3] または [JSON] を選択してください -
検証に成功したら、[次へ] をクリックします。
検証に失敗した場合は、OSS パスがフォルダ (ルートではない) を指していること、バケット名が正しいこと、データ形式がファイルと一致していること、および OSS がご利用の OpenSearch インスタンスと同じリージョンにあることを確認してください。
フィールドの設定
Vector Search Edition は、シナリオテンプレートからフィールドを事前に入力し、データソースからフィールド定義をインポートします。
-
プリセットフィールドを確認します。[Image Search テンプレート] では、デフォルトフィールドは次のとおりです。
フィールド 説明 idプライマリキー source_imageソース画像 namespace名前空間 source_image_vectorソース画像ベクトル -
フィールドタイプとプロパティを設定します。
-
主キー (必須): [タイプ] を整数型または
STRINGに設定してから、[主キー] オプションを選択します。 -
ベクトルフィールド (必須): [タイプ] を
FLOATに設定し、[ベクトルフィールド] チェックボックスを選択します。ベクトルフィールドは、デフォルトでカンマをデリミタとする複数値のFLOATです。必要に応じて、カスタムデリミタを入力します。 -
デフォルト値: データ内のフィールドが欠落しているか空の場合、システムはデフォルト値を入力します。数値型には
0、STRING型には空の文字列が設定されます。必要に応じてデフォルトをカスタマイズしてください。
-
-
前処理が必要なフィールド (
source_imageなど) については、[データ前処理] 列の [設定] をクリックします。前処理の設定では:-
データソース: [OSS オブジェクトストレージ] を選択して OSS から直接イメージをインポートするか (OSS パスを指定)、[Base64 エンコーディング] を選択して API 経由でエンコードされたイメージデータを提供します。
-
前処理テンプレート:データ型に一致するテンプレートを選択します。画像の場合、利用可能なテンプレートは次のとおりです。
-
画像ベクトル化
-
OCR 画像テキスト認識
-
OCR 画像テキスト認識 + 画像ベクトル化
-
-
サービスリスト:テンプレートを選択した後、使用されるモデルを確認します。以下から選択します。
-
組み込みモデル:無料で利用でき、モデルタイプの選択肢は少なめです。
-
この例の設定値:
-
OSS エンドポイント:
oss-cn-shenzhen-internal.aliyuncs.com -
OSS バケット:
zhyq-sz -
サービスリストで、[組み込み] [一般画像埋め込みモデル - 512D CLIP] モデルを選択し、出力フィールドを
source_image_vectorに設定します。
[OK] をクリックして確認します。
-
-
[次へ] をクリックします。
インデックススキーマの設定
-
含めるフィールドとインデックスパラメーターを設定し、次に[次へ] をクリックします。
パラメーター 説明 含まれるフィールド プライマリキーとベクトルフィールドは必須です。名前空間フィールドはオプションです。 ベクトル次元 ベクトル埋め込みのディメンション数 リアルタイムインデックス作成 リアルタイムインデックス更新を有効または無効にします 距離タイプ ベクトル類似検索の距離メトリック ベクトルインデックスアルゴリズム ベクトルインデックスを構築するために使用されるアルゴリズム ベクトルインデックス設定例:
-
インデックス名:
source_image_vector -
ハイブリッド取得:無効
-
プライマリキー:
id、ベクトルフィールド:source_image_vector -
ディメンション:
512 -
距離タイプ: SquaredEuclidean
-
リアルタイムインデックス:
true -
アルゴリズム: Qc
-
-
[詳細設定] をクリックすると、詳細パラメーターフィールドが展開されます:
-
リアルタイム インデックス パラメーター
-
インデックスビルドパラメーター
-
インデックス検索パラメーター
-
線形ビルドしきい値
-
最小再現率候補セットサイズ
-
再現率メトリックレポート
-
問題のあるベクターデータを無視する
完全なパラメーターリファレンスについては、「汎用ベクトルインデックス設定」をご参照ください。
-
確認と検証
-
[作成内容の確認] ページで、設定内容を確認し、[確認] をクリックします。
-
インスタンスリストに戻ります。約 2 分以内にインスタンスステータスが [通常] に変わります。
-
ステータスが正常になったら、[アクション] > [クエリテスト] を使用してテストクエリを実行し、インデックスが動作していることを検証します。