

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ベクトル検索コレクションの使用
<a name="serverless-vector-search"></a>

OpenSearch Serverless の*ベクトル検索*コレクションタイプでは、スケーラブルで高性能な類似検索機能を提供しています。これにより、基盤となるベクトルデータベースインフラストラクチャを管理することなく、最新の機械学習 (ML) によって拡張された検索エクスペリエンスや生成人工知能 (AI) アプリケーションを簡単に構築できます。

ベクトル検索コレクションのユースケースには、画像検索、ドキュメント検索、音楽検索、製品のレコメンデーション、動画検索、位置ベースの検索、不正検出、異常検出などがあります。

OpenSearch Serverless のベクトルエンジンは、[OpenSearch](https://opensearch.org/docs/latest/search-plugins/knn/index/) の k-近傍 (k-NN) 検索機能を利用しているため、サーバーレス環境のシンプルさの恩恵を受けながら、同じ機能を使用できます。エンジンは [k-NN プラグイン API](https://opensearch.org/docs/latest/search-plugins/knn/api/) をサポートしています。これらの操作により、全文検索、高度なフィルタリング、集計、地理空間クエリ、データの高速取得のためのネストされたクエリ、および拡張された検索結果を利用できます。

ベクトルエンジンは、ユークリッド距離、コサイン類似度、ドット積などの距離メトリクスを提供し、16,000 次元に対応できます。数値、ブール値、日付、キーワード、ジオポイントなどのさまざまなデータ型を持つフィールドを保存できます。また、保存されたベクトルにさらにコンテキストを追加するための説明情報用のテキストを含むフィールドを保存することもできます。データ型を同一場所に配置することで、複雑さが軽減され、保守性が向上するとともに、データの重複、バージョン互換性の問題、ライセンスの問題を回避できます。

**注記**  
以下の情報に注意してください。  
Amazon OpenSearch Serverless は、32 ビット浮動ベクトルと 16 ビットベクトル間の変換を実行するために使用できる Faiss 16 ビットスカラー量子化をサポートしています。詳細については、「[Faiss 16-bit scalar quantization](https://opensearch.org/docs/latest/search-plugins/knn/knn-vector-quantization/#faiss-16-bit-scalar-quantization)」を参照してください。バイナリベクトルを使用してメモリコストを削減することもできます。詳細については、「[Binary vectors](https://opensearch.org/docs/latest/field-types/supported-field-types/knn-vector#binary-vectors)」を参照してください。
Amazon OpenSearch Serverless では、ディスクベースのベクトル検索をサポートしています。ディスクベースのベクトル検索は、低メモリ環境のベクトルワークロードの運用コストを大幅に削減します。詳細については、「[Disk-based vector search](https://docs.opensearch.org/2.19/vector-search/optimizing-storage/disk-based-vector-search/)」を参照してください。

## ベクトル検索コレクションの開始方法
<a name="serverless-vector-tutorial"></a>

このチュートリアルでは、次のステップを実行して、ベクトル埋め込みをリアルタイムで保存、検索、取得します。

1. [アクセス許可を設定する](#serverless-vector-permissions)

1. [コレクションを作成する](#serverless-vector-create)

1. [データをアップロードおよび検索する](#serverless-vector-index)

1. [コレクションを削除する](#serverless-vector-delete)

### ステップ 1: アクセス許可を設定する
<a name="serverless-vector-permissions"></a>

このチュートリアルを完了するには (および OpenSearch Serverless を一般的に使用するには）、正しい AWS Identity and Access Management (IAM) アクセス許可が必要です。このチュートリアルでは、コレクションを作成し、データをアップロードして検索を行い、最後にそのコレクションを削除します。

ユーザーまたはロールには、以下の最低限の許可を含む [ID ベースのポリシー](security-iam-serverless.md#security-iam-serverless-id-based-policies)が、アタッチされている必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "aoss:CreateCollection",
        "aoss:ListCollections",
        "aoss:BatchGetCollection",
        "aoss:DeleteCollection",
        "aoss:CreateAccessPolicy",
        "aoss:ListAccessPolicies",
        "aoss:UpdateAccessPolicy",
        "aoss:CreateSecurityPolicy",
        "iam:ListUsers",
        "iam:ListRoles"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

OpenSearch Serverless での IAM アクセス許可の詳細については、「[Amazon OpenSearch Serverless 向けの アイデンティティとアクセス管理](security-iam-serverless.md)」を参照してください。

### ステップ 2: コレクションを作成する
<a name="serverless-vector-create"></a>

*コレクション*とは、連携して特定のワークロードやユースケースをサポートする、OpenSearch インデックスのグループです。

**OpenSearch Serverless コレクションを作成するには**

1. [https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home ) で Amazon OpenSearch Service コンソールを開きます。

1. 左側のナビゲーションペインで **[Collections]** (コレクション) 、**[Create collection]** (コレクションを作成) を選択します。

1. コレクションに **[housing]** という名前を付けます。

1. コレクションタイプで、**[ベクトル検索]** を選択します。詳細については、「[コレクションタイプを選択する](serverless-overview.md#serverless-usecase)」を参照してください。

1. **[デプロイのタイプ]** で、**[冗長性を有効化 (アクティブレプリカ)]** をオフにします。これにより、開発モードまたはテストモードでコレクションが作成され、コレクション内の OpenSearch Compute Units (OCU) の数が 2 に減ります。このチュートリアルで本番環境を作成する場合は、チェックボックスをオンのままにしてください。

1. **[セキュリティ]** で、**[簡単作成]** を選択してセキュリティ設定を合理化します。ベクトルエンジン内のすべてのデータは、転送中であっても、保管中であっても、デフォルトで暗号化されます。ベクトルエンジンは、きめ細かい (IAM) アクセス許可をサポートしているため、暗号化、ネットワーク、コレクション、インデックスを作成、更新、削除できるユーザーを定義できます。

1. [**次へ**] を選択します。

1. コレクションの設定を確認して、**[Submit]** (送信) を選択します。コレクションステータスが `Active` になるまで数分待機します。

### ステップ 3: データをアップロードして検索する
<a name="serverless-vector-index"></a>

*インデックス*とは、ベクトル埋め込みやその他のフィールドを保存、検索、取得する方法を提供する共通のデータスキーマを持ったドキュメントのコレクションです。OpenSearch Dashboards の [開発ツール](https://opensearch.org/docs/latest/dashboards/dev-tools/index-dev/)コンソールや、[Postman](https://www.postman.com/downloads/) または [awscurl](https://github.com/okigan/awscurl) のような HTTP ツールを使用して、OpenSearch Serverless コレクションのインデックスを作成し、データをアップロードできます。このチュートリアルでは、開発ツールを使用します。

**住宅コレクション内のデータのインデックス作成と検索を行うには**

1. 新しいコレクション用に単一のインデックスを作成するには、[開発ツール](https://opensearch.org/docs/latest/dashboards/dev-tools/index-dev/)コンソールで次のリクエストを送信します。デフォルトでは、これにより、`nmslib` エンジンとユークリッド距離を使用してインデックスが作成されます。

   ```
   PUT housing-index
   {
      "settings": {
         "index.knn": true
      },
      "mappings": {
         "properties": {
            "housing-vector": {
               "type": "knn_vector",
               "dimension": 3
            },
            "title": {
               "type": "text"
            },
            "price": {
               "type": "long"
            },
            "location": {
               "type": "geo_point"
            }
         }
      }
   }
   ```

1. 1 つのドキュメントを *housing-index* にインデックスするために、次のリクエストを送信します。

   ```
   POST housing-index/_doc
   {
     "housing-vector": [
       10,
       20,
       30
     ],
     "title": "2 bedroom in downtown Seattle",
     "price": "2800",
     "location": "47.71, 122.00"
   }
   ```

1. インデックス内のプロパティに類似したプロパティを検索するには、次のクエリを送信します。

   ```
   GET housing-index/_search
   {
       "size": 5,
       "query": {
           "knn": {
               "housing-vector": {
                   "vector": [
                       10,
                       20,
                       30
                   ],
                   "k": 5
               }
           }
       }
   }
   ```

### ステップ 4: コレクションを削除する
<a name="serverless-vector-delete"></a>

*housing* コレクションはテスト用のため、テストを終了したら忘れずに削除してください。

**OpenSearch Serverless コレクションを削除するには**

1. **Amazon OpenSearch Service** コンソールに戻ります。

1. 左側のナビゲーションペインで **[コレクション]** を選択した後、[**プロパティ**] コレクションを選択します。

1. **[削除]** を選択し、削除を確定します。

## フィルタリングされた検索
<a name="serverless-vector-filter"></a>

フィルターを使用して、セマンティック検索の結果を絞り込むことができます。インデックスを作成し、ドキュメントに対してフィルター検索を実行するには、前のチュートリアルの「[データをアップロードおよび検索する](#serverless-vector-index)」を次の手順に置き換えます。他のステップは同じです。フィルターの詳細については、「[フィルターを使用した k-NN 検索](https://opensearch.org/docs/latest/search-plugins/knn/filter-search-knn/)」を参照してください。

**住宅コレクション内のデータのインデックス作成と検索を行うには**

1. コレクション用に単一のインデックスを作成するには、[開発ツール](https://opensearch.org/docs/latest/dashboards/dev-tools/index-dev/)コンソールで次のリクエストを送信します。

   ```
   PUT housing-index-filtered
   {
     "settings": {
       "index.knn": true
     },
     "mappings": {
       "properties": {
         "housing-vector": {
           "type": "knn_vector",
           "dimension": 3,
           "method": {
             "engine": "faiss",
             "name": "hnsw"
           }
         },
         "title": {
           "type": "text"
         },
         "price": {
           "type": "long"
         },
         "location": {
           "type": "geo_point"
         }
       }
     }
   }
   ```

1. 1 つのドキュメントを *housing-index-filtered* にインデックスするために、次のリクエストを送信します。

   ```
   POST housing-index-filtered/_doc
   {
     "housing-vector": [
       10,
       20,
       30
     ],
     "title": "2 bedroom in downtown Seattle",
     "price": "2800",
     "location": "47.71, 122.00"
   }
   ```

1. 地理的位置から指定された距離内にある、指定された価格未満のシアトルのアパートのデータを検索するには、次のリクエストを送信します。

   ```
   GET housing-index-filtered/_search
   {
     "size": 5,
     "query": {
       "knn": {
         "housing-vector": {
           "vector": [
             0.1,
             0.2,
             0.3
           ],
           "k": 5,
           "filter": {
             "bool": {
               "must": [
                 {
                   "query_string": {
                     "query": "Find me 2 bedroom apartment in Seattle under $3000 ",
                     "fields": [
                       "title"
                     ]
                   }
                 },
                 {
                   "range": {
                     "price": {
                       "lte": 3000
                     }
                   }
                 },
                 {
                   "geo_distance": {
                     "distance": "100miles",
                     "location": {
                       "lat": 48,
                       "lon": 121
                     }
                   }
                 }
               ]
             }
           }
         }
       }
     }
   }
   ```

## 数十億規模のワークロード
<a name="serverless-vector-billion"></a>

ベクトル検索コレクションは、数十億のベクトルを使用するワークロードをサポートします。スケーリングのためにインデックスを再作成する必要はありません。自動スケーリングが自動的にこれを実行します。次元数の多いベクトルが数百万 (またはそれ以上) あり、200 を超える OCU が必要な場合は、[AWS サポート](https://aws.amazon.com/premiumsupport/)に問い合わせて、アカウントの最大 OpenSearch Compute Units (OCU) を引き上げてください。

## 制限事項
<a name="serverless-vector-limitations"></a>

ベクトル検索コレクションには次の制限があります。
+ ベクトル検索コレクションは、Apache Lucene ANN エンジンをサポートしていません。
+ ベクター検索コレクションは Faiss を含む HNSW アルゴリズムのみをサポートし、IVF と IVFQ はサポートしていません。
+ ベクトル検索コレクションは、ウォームアップ、統計、モデルトレーニング API をサポートしていません。
+ ベクトル検索コレクションは、インラインスクリプトまたはストアドスクリプトをサポートしていません。
+ インデックスカウント情報は、ベクトル検索コレクションの AWS マネジメントコンソール では使用できません。
+ ベクトル検索コレクションのインデックスの更新間隔は 60 秒です。

## 次の手順
<a name="serverless-vector-next"></a>

これで、ベクトル検索コレクションおよびインデックスデータの作成方法がわかりました。さらに、次のいくつかの演習も有用です。
+ OpenSearch Python クライアントを使用して、ベクトル検索コレクションを操作します。[GitHub](https://github.com/opensearch-project/opensearch-py/blob/main/guides/plugins/knn.md) でこのチュートリアルを参照してください。
+ OpenSearch Java クライアントを使用して、ベクトル検索コレクションを操作します。[GitHub](https://github.com/opensearch-project/opensearch-java/blob/main/guides/plugins/knn.md) でこのチュートリアルを参照してください。
+ OpenSearch をベクトルストアとして使用するように LangChain を設定します。LangChain は、言語モデルを利用してアプリケーションを開発するためのオープンソースフレームワークです。詳細については、[LangChain ドキュメント](https://python.langchain.com/docs/integrations/vectorstores/opensearch)を参照してください。