📮

Amazon OpenSearch Serverless のベクトル検索を試してみた

2023/11/08に公開

概要

この記事では、Postmanを使用して、Amazon OpenSearch Serverlessのベクトル検索を試す手順を紹介しています。以下に記載された手順は、AWSの公式ドキュメントに基づいていますが、ドキュメントでは不明瞭な部分があるため、実際に試しながら得た知見を共有します。

https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vector-search.html

前提条件

  • AWSアカウントが作成済みであること
  • IAMユーザーやIAMポリシーの設定ができること
  • AWSクレデンシャルが取得済みであること
  • Postmanを使用できること

IAMポリシーの設定

必要なIAMポリシーの設定は、ドキュメントにある通り、以下のとおりです。

{
  "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": "*"
    }
  ]
}

使用するクレデンシャルに関連するIAMユーザーに上記ポリシーを付与します。

コレクションの作成

https://console.aws.amazon.com/aos/home

Amazon OpenSearchのコンソールにアクセスし、サーバレスでコレクションを作成します。

以下のとおりに項目を設定して、作成ボタンをクリックします。

コレクションの作成には、数分かかります。

データアクセスポリシーの設定

コレクションが作成されたら、データアクセスポリシーを設定します。コレクション作成の際に「セキュリティ」の項目で "簡単設定" を選択していると、自動で設定されたものが作成されていますが、追加で設定が必要です。この追加設定を行わなかった場合、後工程のPostmanでの認可処理がうまく動作しませんでした。

自動作成された設定を選択し、設定画面にアクセスします。

データアクセスポリシー

設定画面にある編集ボタンをクリックし、プリンシパルの設定を行います。

データアクセスポリシーの編集ボタンクリック

プリンシパルを選択

IAMユーザーの選択

プリンシパルには、クレデンシャルに紐づいているIAMユーザーを選択します。設定したら、保存します。

以上で、OpenSearch側の設定は完了です。

エンドポイントのメモ

Postmanでリクエストを送るため、エンドポイントをメモしておきます。

エンドポイントをメモ

Postmanの認証設定

PostmanからOpenSearchのエンドポイントにアクセスするために、認証設定を行います。

以下のように、IAMユーザーのクレデンシャルを設定します。

PostmanのAuthenticationの設定

Postmanでリクエストを送る

以下の流れで、リクエストを送り、動作確認をします。

インデックスを作成する

  • メソッド: PUT
  • パス: /housing-index
Body
{
   "settings": {
      "index.knn": true
   },
   "mappings": {
      "properties": {
         "housing-vector": {
            "type": "knn_vector",
            "dimension": 3
         },
         "title": {
            "type": "text"
         },
         "price": {
            "type": "long"
         },
         "location": {
            "type": "geo_point"
         }
      }
   }
}

ドキュメントを作成する

  • メソッド: POST
  • パス: /housing-index/_doc
Body
{
  "housing-vector": [
    10,
    20,
    30
  ],
  "title": "2 bedroom in downtown Seattle",
  "price": "2800",
  "location": "47.71, 122.00"
}

ドキュメントを検索する

  • メソッド: GET
  • パス: /housing-index/_search
Body
{
    "size": 5,
    "query": {
        "knn": {
            "housing-vector": {
                "vector": [
                    10,
                    20,
                    30
                ],
                "k": 5
            }
        }
    }
}

以上です。
必要があれば、色々なリクエストを送って、動作を確認してください。

Discussion