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

OpenSearch:エンドツーエンドの画像検索ソリューションを構築する

最終更新日:Jan 13, 2025

このトピックでは、ベクトルデータが利用できない場合に、OpenSearch Vector Search Edition を使用して画像検索サービスを構築する方法について説明します。

指定された画像またはテキストに基づく画像検索などの画像検索機能を実装するには、画像ソースデータを OpenSearch にインポートし、OpenSearch で画像のベクトル化やベクトル検索などの操作を実行できます。

アーキテクチャ

image_409b3ae0cc76

次の 3 つのサービスポートフォリオのいずれかを使用して、画像をアップロードし、画像検索エンジンを構築できます:

  • OSS + MaxCompute + OpenSearch Vector Search Edition: オブジェクトストレージサービス (OSS) バケットに画像をアップロードし、ビジネステーブルデータと各データエントリに対応する画像 URL を MaxCompute に保存できます。画像 URL は、OSS バケット内の各画像の URL を指します。例: /image/1.jpg。

  • MaxCompute + OpenSearch Vector Search Edition: Base64 エンコードされた画像と対応するテーブルデータを MaxCompute に保存できます。

  • API + OpenSearch Vector Search Edition: OpenSearch Vector Search Edition によって提供される操作を呼び出して、Base64 エンコードされた画像と対応するテーブルデータを OpenSearch Vector Search Edition インスタンスにプッシュできます。

この例では、最初のサービスポートフォリオを使用して画像検索エンジンを構築します。

準備

1. AccessKey ペアを作成する

Alibaba Cloud アカウントを作成して初めてコンソールにログオンすると、後続の操作を実行する前に AccessKey ペアを作成するように求められます。

  • OpenSearch インスタンスの作成と使用には AccessKey ペアが必要となるため、Alibaba Cloud アカウントの AccessKey ペアを作成する必要があります。

  • Alibaba Cloud アカウントの AccessKey ペアを作成した後、Resource Access Management (RAM) ユーザーの AccessKey ペアを作成できます。このようにして、RAM ユーザーとして OpenSearch インスタンスにアクセスできます。RAM ユーザーに権限を付与する方法の詳細については、RAM ユーザーの作成と承認 を参照してください。

2. OSS バケットを作成する

image_409ce896ccx9

  1. OSS コンソールを使用して開始する.

  2. OSS コンソールを使用して開始する.

  3. OSS コンソールを使用して開始する.

  1. OSS バケットの opensearch タグを作成します。タグのキーと値はどちらも opensearch です。

image

この例では、1,000 個の画像が OSS バケットにアップロードされます。

次の図は、アップロードされた画像の一部を示しています。

image_409d84d0cc9c

OpenSearch Vector Search Edition インスタンスを購入する

詳細については、OpenSearch Vector Search Edition インスタンスの購入 を参照してください。

インスタンスを構成する

購入したインスタンスは、「構成保留中」状態です。検索操作を実行するには、インスタンスのテーブルを構成する必要があります。

image.png

  1. 「基本的なテーブル情報」ステップで、次のパラメータを構成し、「次へ」をクリックします。

image.png

:

  • テーブル名: テーブルの名前。テーブル名はカスタマイズできます。

  • データシャード: テーブルに含まれるデータシャードの数。1 から 256 の範囲の正の整数を入力します。シャーディングを実行してフルインデックス作成を高速化し、単一クエリの パフォーマンスを向上させることができます。既存の OpenSearch インスタンスに複数のインデックステーブルを作成する場合は、インデックステーブルに同じ数のシャードが含まれていることを確認してください。または、少なくとも 1 つのインデックステーブルに 1 つのシャードが含まれており、他のインデックステーブルに同じ数のシャードが含まれていることを確認してください。

  • データ更新のリソース数: データ更新に使用されるリソースの数。デフォルトでは、OpenSearch は OpenSearch Vector Search Edition インスタンスの各データソースに対してデータ更新用に 2 つのリソースの無料クォータを提供します。各リソースは 4 つの CPU コアと 8 GB のメモリで構成されています。無料クォータを超えるリソースに対しては課金されます。詳細については、国際サイト (alibabacloud.com) 向けの OpenSearch Vector Search Edition の課金概要 を参照してください。

  • シナリオテンプレート: テーブルの作成に使用されるテンプレート。この例では、「ベクトル: 画像検索」が選択されています。

  • データ処理: この例では、「生データをベクトルデータに変換する」が選択されています。

  1. 「データ同期」ステップで、次のパラメータを構成してデータソースを追加し、「チェック」をクリックしてデータソース情報を確認します。データソース情報がチェックに合格したら、「次へ」をクリックします。

image.png

パラメータ:

  • フルデータソース: データソースのタイプ。有効な値: MaxCompute + API、OSS + API、および API。この例では、「MaxCompute + API」が選択されています。

  • プロジェクト: アクセスする MaxCompute プロジェクトの名前。

  • AccessKey: Alibaba Cloud アカウントまたは Alibaba Cloud アカウント内の RAM ユーザーの AccessKey ID。

  • AccessKey シークレット: AccessKey ID に対応する AccessKey シークレット。

  • テーブル: アクセスする MaxCompute テーブルの名前。

  • パーティションキー: MaxCompute データソースのパーティションキー。このパラメータは必須です。例: ds=20170626。

  • タイムスタンプ: API 操作を使用して増分データをプッシュする場合、このパラメータは、システムがデータソースから増分データを同期する開始時点を指定します。過去 72 時間以内の日時を選択できます。

  • 自動再インデックス作成: 自動再インデックス作成機能を有効にするかどうかを指定します。自動再インデックス作成機能が有効になっている場合、システムはデータソースのデータ変更を検出するたびに、データソースを参照するインデックステーブルの再インデックス作成を自動的に実行します。

説明
  • 自動再インデックス作成機能を有効にする場合は、完了テーブルを作成する必要があります。詳細については、「MaxCompute データソース」トピックの 自動再インデックス作成の構成 セクションを参照してください。

  1. 「フィールド構成」ステップで、テーブルのフィールドを構成し、「次へ」をクリックします。

image.png

少なくとも主キーフィールド、ベクトルフィールド、および埋め込みが必要なフィールドを構成する必要があります。

OSS バケットに保存されている画像

「ベクトル: 画像検索」テンプレートを選択すると、OpenSearch は id、cate_id、vector、および vector_source_image というプリセットフィールドを自動的に生成します。id フィールドは主キーを指定します。cate_id フィールドはカテゴリ ID を指定します。vector フィールドはベクトルを指定します。vector_source_image フィールドは保存されている画像の URL を指定します。MaxCompute データソースを構成すると、データソースから同期されたフィールドがプリセットフィールドの下に表示されます。

3.1. vector_source_image フィールドを構成します。「タイプ」パラメータを「STRING」に設定し、「埋め込みが必要」列のチェックボックスをオンにする必要があります

対応するビジネステーブルフィールドに基づいて、プリセットフィールドの名前を変更できます。フィールドの高度な構成が正しいことを確認してください。

image.png

vector_source_image フィールドの高度な構成のパラメータを構成するには、「高度な構成」列の「編集」をクリックします。表示されるパネルで、次のパラメータを構成します。

image

パラメータ:

  • ベクトル化モデル

    • clip: 通常の画像をベクトルに変換します。

    • clip_ecom: e コマース画像をベクトルに変換します。

  • データ型: この例では、「image(path)」が選択されています。

  • ソースコンテンツタイプ: この例では、「oss」が選択されています。

  • OSS バケット: OSS バケットの名前。

注: ソースデータが OSS バケットからのものである場合、AliyunServiceRoleForSearchEngine という名前のサービスリンクロールが必要です。

重要

たとえば、画像の OSS URL が /test image/lake.jpg の場合、vector_source_image フィールドの値は /test image/lake.jpg である必要があります。

3.2. vector フィールドを構成します。「タイプ」パラメータを「FLOAT」に設定し、「ベクトルフィールド」列を選択する必要があります

image.png

Base64 エンコードされた画像

「ベクトル: 画像検索」テンプレートを選択すると、OpenSearch は id、cate_id、vector、および vector_source_image というプリセットフィールドを自動的に生成します。id フィールドは主キーを指定します。cate_id フィールドはカテゴリ ID を指定します。vector フィールドはベクトルを指定します。vector_source_image フィールドは保存されている画像の URL を指定します。MaxCompute データソースを構成すると、データソースから同期されたフィールドがプリセットフィールドの下に表示されます。

3.1. vector_source_image フィールドを構成します。「タイプ」パラメータを「STRING」に設定し、「埋め込みが必要」列のチェックボックスをオンにする必要があります

対応するビジネステーブルフィールドに基づいて、プリセットフィールドの名前を変更できます。フィールドの高度な構成が正しいことを確認してください。

image.png

vector_source_image フィールドの高度な構成のパラメータを構成するには、「高度な構成」列の「編集」をクリックします。表示されるパネルで、次のパラメータを構成します。

image.png

  • ベクトル化モデル: 通常の画像または e コマース画像をベクトルに変換するためのモデルを選択できます。有効な値:

    • clip: 通常の画像をベクトルに変換します。

    • clip_ecom: e コマース画像をベクトルに変換します。

  • データ型: この例では、「画像 (Base64 エンコード)」が選択されています。

3.2. vector フィールドを構成します。「タイプ」パラメータを「FLOAT」に設定し、「ベクトルフィールド」列を選択する必要があります

image.png

  1. 「インデックススキーマ」ステップで、インデックススキーマを構成し、「次へ」をクリックします。

image.png

:

  • ベクトルインデックスの名前は、ベクトルフィールドの名前と同じです。

  • 「含まれるフィールド」セクションには、主キーフィールド、ベクトルフィールド、および名前空間というフィールドが含まれています。名前空間フィールドはオプションです。

  • ビジネス要件に基づいて、高度な構成のパラメータを構成します。

説明

画像から生成されるベクトルのデフォルトの次元は 512 であり、変更できません。

  1. 構成が完了したら、「確認」をクリックします。

image.png

  1. インスタンス詳細ページの左側ペインにある「変更履歴」をクリックして、テーブルの作成の進行状況を表示します。

フルデータが同期された後、検索テストを実行できます。

クエリテストを実行する

OpenSearch コンソールでクエリテストを実行する

OpenSearch コンソールでデータをクエリする方法の詳細については、クエリテスト を参照してください。

SDK を使用してクエリテストを実行する

サンプルクエリリクエスト: 詳細については、「データのクエリ」トピックの 予測クエリ セクションを参照してください。

サンプル結果:

{
    "totalCount": 5,
    "result": [
        {
            "id": 5,
            "score": 1.103209137916565
        },
        {
            "id": 3,
            "score": 1.1278988122940064
        },
        {
            "id": 2,
            "score": 1.1326735019683838
        }
    ],
    "totalTime": 242.615
}

result: 返された結果。

構文

SDK を使用してベクトルベースのクエリを実行する

  • SDK を使用してベクトルベースのクエリまたは主キーベースのクエリを実行します。詳細については、データのクエリ を参照してください。

  • SDK を使用してドキュメントを追加または削除します。詳細については、データの更新 を参照してください。