

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

# Amazon Personalize を使用したオープンソースの Open Search の結果のパーソナライズ
<a name="opensearch-open-source"></a>

オープンソースの OpenSearch の結果をパーソナライズするには、次の操作を行います。

1.  **Amazon Personalize のセットアップ** — まだセットアップをしていない場合は、[Amazon Personalize の設定](setup.md) のステップを実行して認証情報を設定し、Amazon Personalize のアクセス権限を設定します。OpenSearch の結果をパーソナライズするために AWS SDKs を設定する必要はありません。

1.  **Amazon Personalize ワークフローの完了** – Amazon Personalize ワークフローを完了すると、データのインポート、Personalized-Ranking-v2 または Personalized-Ranking レシピを使ったソリューションの作成、カスタムソリューションバージョンのトレーニング、キャンペーンへのデプロイが可能になります。アイテムインタラクションデータセットを作成する必要があります。ユーザーデータセットとアイテムデータセットはオプションです。詳細については、「[Amazon Personalize のワークフローの詳細](personalize-workflow.md)」を参照してください。

1.  **アクセス許可の設定** — OpenSearch クラスターから Amazon Personalize リソースにアクセスできるようにアクセス許可を設定します。詳細については、「[アクセス許可のセットアップ](opensearch-granting-access.md)」を参照してください。

1.  **Amazon Personalize Search Ranking プラグインをインストールする** — Amazon Personalize Search Ranking プラグインは、Amazon Personalize との通信と結果の再ランク付けを処理します。
   + OpenSearch クラスターが既に実行されている場合は、プラグインを手動でインストールできます。詳細については、「[既存の OpenSearch クラスターにプラグインを手動でインストールします。](opensearch-manual-install.md)」を参照してください。
   + OpenSearch クラスターをまだ作成していない場合は、クイックスタート bash スクリプトを使用してクラスターを作成できます。詳細については、「[新しいクラスターを作成し、スクリプトを使用してプラグインをインストールする](opensearch-install-with-script.md)」を参照してください。

1.  **Amazon Personalize Search Ranking プラグインの設定** — プラグインを設定するには、検索パイプラインを作成します。*検索パイプライン*は、リクエストプロセッサとレスポンスプロセッサのセットです。プラグインのパイプラインを作成するときは、`personalized_search_ranking` レスポンスプロセッサで Amazon Personalize リソースを指定します。また、プラグインが結果を再ランク付けするときに Amazon Personalize からの結果に与える重みも設定します。詳細については、「[パイプラインの作成](opensearch-plugin-pipeline-example.md)」を参照してください。

1.  **Amazon Personalize Search Ranking プラグインを OpenSearch クエリに適用** — Amazon Personalize Search Ranking プラグインを OpenSearch インデックスのすべてのクエリとレスポンスに適用できます。このプラグインは個々の OpenSearch クエリとレスポンスに適用することもできます。オープンソースの OpenSearch にプラグインを適用する方法については、「[プラグインの適用](opensource-apply-plugin.md)」を参照してください。

1.  **結果の比較** — Amazon Personalize Search Ranking プラグインは、OpenSearch クエリレスポンス内の検索結果をランク付けし直します。Amazon Personalize のランキングと OpenSearch のランキングの両方が考慮されます。結果がどのように再ランク付けされるかを理解するには、パーソナライゼーションを使用するクエリと使用しないクエリの結果を比較できます。結果をオープンソースの OpenSearch と比較する方法については、「[結果の比較](opensource-comparing-results.md)」を参照してください。

1.  **Amazon Personalize Search Ranking プラグインの監視** — Amazon Personalize Search Ranking プラグインを検索クエリに適用すると、検索パイプラインのメトリクスを取得してプラグインを監視できます。オープンソースの OpenSearch クラスターでプラグインをモニタリングする方法については、「[オープンソースの OpenSearch によるプラグインの監視](opensource-monitor.md)」を参照してください。OpenSearch から返されるパイプラインメトリクスの例については、「[パイプラインメトリクスの例](monitor-response.md)」を参照してください。

**Topics**
+ [オープンソースの OpenSearch アクセス許可のセットアップ](opensearch-granting-access.md)
+ [既存の OpenSearch クラスターに Amazon Personalize Search Ranking プラグインを手動でインストールする](opensearch-manual-install.md)
+ [新しいクラスターを作成し、スクリプトを使用してプラグインをインストールする](opensearch-install-with-script.md)
+ [オープンソース OpenSearch でパイプラインを作成する](opensearch-plugin-pipeline-example.md)
+ [オープンソースの OpenSearch のクエリに Amazon Personalize Search Ranking プラグインを適用する](opensource-apply-plugin.md)
+ [パーソナライズされた OpenSearch の結果を、パーソナライズされていない結果と比較する](opensource-comparing-results.md)
+ [オープンソースの OpenSearch によるプラグインの監視](opensource-monitor.md)

# オープンソースの OpenSearch アクセス許可のセットアップ
<a name="opensearch-granting-access"></a>

オープンソースの OpenSearch を使用する場合は、オープンサーチクラスターから Amazon Personalize リソースにアクセスできる必要があります。アクセス許可を付与するには、次の手順を実行します。
+ OpenSearch を最初からセットアップする場合は、[クイックスタート Bash スクリプト](https://github.com/opensearch-project/search-processor/blob/main/helpers/personalized_search_ranking_quickstart.sh)を使用して OpenSearch クラスターを Docker コンテナで実行できます。スクリプトは、 AWS プロファイルのデフォルトの認証情報を使用します。スクリプトを実行するときに、代替プロファイルを指定できます。

  これらの認証情報は、Amazon Personalize キャンペーンの GetPersonalizedRanking アクションを実行するアクセス許可を持つユーザーまたはロールに関連付けられている必要があります。IAM ポリシーの例については、「[IAM ポリシーの例](#opensearch-role-policy-example)」を参照してください。または、認証情報にはこれらのアクセス許可を持つロールを引き受けるアクセス許可が必要です。Amazon Personalize Search Ranking プラグインのパイプラインを作成するときに、このロールの Amazon リソースネーム (ARN) を指定できます。
+ [クイックスタート Bash スクリプト](https://github.com/opensearch-project/search-processor/blob/main/helpers/personalized_search_ranking_quickstart.sh)を使用しない場合は、OpenSearch キーストアに認証情報を手動で追加できます。これらの認証情報は、Amazon Personalize キャンペーンの GetPersonalizedRanking アクションを実行する権限を持つユーザーまたはロールと一致している必要があります。

  OpenSearch キーストアに AWS 認証情報を手動で追加するには、OpenSearch クラスターが実行されている (Docker コンテナなど) 次のコマンドを実行します。次に、各認証情報を入力します。セッショントークンを使用しない場合は、コマンドの最後の行を省略できます。

  ```
  opensearch-keystore add \
  personalized_search_ranking.aws.access_key \
  personalized_search_ranking.aws.secret_key \
  personalized_search_ranking.aws.session_token
  ```
+ Amazon EC2 インスタンスで OpenSearch クラスターを実行する場合、IAM インスタンスプロファイルを使用してアクセス許可を付与できます。ロールにアタッチされたポリシーは、Amazon Personalize キャンペーンの GetPersonalizedRanking アクションを実行するアクセス許可をロールに付与する必要があります。また、ロールを引き受けるためのアクセス許可を Amazon EC2 に付与する必要があります｡ 

  Amazon EC2 インスタンスプロファイルについては、「[インスタンスプロファイルの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)」を参照してください。ポリシーの例については「[IAM ポリシーの例](#opensearch-role-policy-example)」を参照してください。

## IAM ポリシーの例
<a name="opensearch-role-policy-example"></a>

次のポリシー例では、Amazon Personalize キャンペーンからパーソナライズされたランキングを取得するための最低限のアクセス許可をユーザーまたはロールに付与します。`Campaign ARN` には、Amazon Personalize キャンペーンの Amazon リソースネーム (ARN) を指定します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "personalize:GetPersonalizedRanking"
            ],
            "Resource": "arn:aws:personalize:us-east-1:111122223333:campaign/YourResourceId"
        }
    ]
}
```

------

さらに、OpenSearch クラスターを Amazon EC2 インスタンスで実行し、IAM インスタンスプロファイルを使用してアクセス許可を付与する場合、ロールの信頼ポリシーは、次のように Amazon EC2 に `AssumeRole` アクセス許可を付与する必要があります。Amazon EC2 インスタンスプロファイルについては、「[インスタンスプロファイルの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

# 既存の OpenSearch クラスターに Amazon Personalize Search Ranking プラグインを手動でインストールする
<a name="opensearch-manual-install"></a>

すでに OpenSearch クラスターがある場合は、OpenSearch GitHub リポジトリから直接クラスターにプラグインを手動でインストールできます。

**プラグインを手動でインストールするには**

1.  OpenSearch クラスターを起動するには、以下のコマンドを使用します。

   ```
   bin/opensearch
   ```

1. カタログデータを OpenSearch クラスターにまだアップロードしていない場合は、OpenSearch クラスターにアップロードします。データをアップロードするときは、OpenSearch インデックスを作成し、フィールドマッピングを定義します。次に、そのインデックスにデータをアップロードします。例については、「[サンプルデータを使用してインデックスとフィールドマッピングを作成する](https://opensearch.org/docs/latest/quickstart/#create-an-index-and-field-mappings-using-sample-data)」を参照してください。

1. プラグインをインストールするには、次のコマンドを使用します。

   ```
   bin/opensearch-plugin install https://github.com/opensearch-project/search-processor/releases/download/2.9.0/opensearch-search-processor-2.9.0.0.zip
   ```

   プラグインのインストールについての詳細は、「[プラグインのインストール](https://opensearch.org/docs/latest/install-and-configure/plugins/)」を参照してください。

 Amazon Personalize Search Ranking プラグインをインストールしたら、設定する準備が整います。プラグインを設定するには、検索パイプラインを作成し、`personalized_search_ranking` レスポンスプロセッサを指定します。詳細については、「[パイプラインの作成](opensearch-plugin-pipeline-example.md)」を参照してください。

# 新しいクラスターを作成し、スクリプトを使用してプラグインをインストールする
<a name="opensearch-install-with-script"></a>

OpenSearch クラスターをまだ作成していない場合は、クイックスタート bash スクリプトを使用してクラスターを作成できます。このスクリプトは、Docker コンテナに OpenSearch クラスターをセットアップし、AWSデフォルトプロファイルを使用して認証情報を設定し、Amazon Personalize Search Ranking プラグインをインストールします。

 OpenSearch クラスターを手動で作成する方法については、OpenSearch ドキュメントの「[クイックスタート](https://opensearch.org/docs/quickstart)」の説明を参照してください。

**クイックスタート Bash スクリプトを使用してプラグインをインストールするには**

1.  スクリプトを実行する前に、ご使用のオペレーティングシステム用の [Docker Desktop](https://docs.docker.com/get-docker/) をダウンロードしてインストールします。

1. [クイックスタート Bash スクリプト](https://github.com/opensearch-project/search-processor/blob/main/helpers/personalized_search_ranking_quickstart.sh)を GitHub からダウンロードします。

1. ワーキングディレクトリで、次のコマンドを使用してスクリプトを実行します。

   ```
   sh personalized_search_ranking_quickstart.sh
   ```

   このコマンドでは、スクリプトはデフォルト AWS プロファイルの認証情報を使用します。代替プロファイルを指定するには、デフォルトの `--profile` 引数を使用します。

   ```
   sh personalized_search_ranking_quickstart.sh --profile profile-name
   ```

   スクリプトを実行すると、スクリプトによって作成された固有のディレクトリにある README ファイルに、そのスクリプトに関する詳細情報が記載されます。このディレクトリには、スクリプトが使用する Dockerfile ファイルと docker-compose.yml ファイルが格納されます。例: `../opensearch-personalize-intelligent-ranking-docker.1234/README`。

1. カタログデータを OpenSearch クラスターにアップロードします。データをアップロードする際は、OpenSearch インデックスを作成し、フィールドマッピングを定義します。次に、そのインデックスにデータをアップロードします。例については、「[サンプルデータを使用してインデックスとフィールドマッピングを作成する](https://opensearch.org/docs/latest/quickstart/#create-an-index-and-field-mappings-using-sample-data)」を参照してください。

 OpenSearch をセットアップして Amazon Personalize Search Ranking プラグインをインストールしたら、設定する準備は完了です。プラグインを設定するには、検索パイプラインを作成し、`personalized_search_ranking` レスポンスプロセッサを指定します。詳細については、「[パイプラインの作成](opensearch-plugin-pipeline-example.md)」を参照してください。

# オープンソース OpenSearch でパイプラインを作成する
<a name="opensearch-plugin-pipeline-example"></a>

クラスターにプラグインをインストールしたら、OpenSearch 検索パイプラインを作成して設定する準備が整います。

*検索パイプライン*は、作成した順序で順番に実行されるリクエストプロセッサとレスポンスプロセッサのセットです。プラグインの検索パイプラインを作成するときは、`personalized_search_ranking` レスポンスプロセッサを指定します。検索パイプラインについて詳しくは、「[検索パイプライン](https://opensearch.org/docs/latest/search-plugins/search-pipelines/index/)」を参照してください。

`personalized_search_ranking` レスポンスプロセッサを含むパイプラインを作成したら、クエリにプラグインを適用する準備が整います。詳細については、「[プラグインの適用](opensource-apply-plugin.md)」を参照してください。

次の curl コマンドを使用して、オープンソースの OpenSearch クラスター上に `personalized_search_ranking` レスポンスプロセッサーを備えた検索パイプラインを作成できます。各 `personalized_search_ranking` パラメータの詳細については、「[`personalized_search_ranking` レスポンスプロセッサのフィールド](opensearch-plugin-pipeline-fields.md)」を参照してください。

```
curl -X PUT "http://localhost:9200/_search/pipeline/pipeline-name" -ku 'admin:admin' --insecure -H 'Content-Type: application/json' -d'
{
  "description": "A pipeline to apply custom re-ranking from Amazon Personalize",
  "response_processors" : [
    {
      "personalized_search_ranking" : {
        "campaign_arn" : "Amazon Personalize Campaign ARN",
        "item_id_field" : "productId",
        "recipe" : "aws-personalized-ranking-v2",
        "weight" : "0.3",
        "tag" : "personalize-processor",
        "iam_role_arn": "Role ARN",
        "aws_region": "AWS region",
        "ignore_failure": true
      }
    }
  ]
}'
```

`personalized_search_ranking` レスポンスプロセッサを含む検索パイプラインを作成したら、OpenSearch クエリにプラグインを適用する準備が整います。このプラグインを OpenSearch インデックスに適用することも、個々の OpenSearch クエリに適用することもできます。詳細については、「[オープンソースの OpenSearch のクエリに Amazon Personalize Search Ranking プラグインを適用する](opensource-apply-plugin.md)」を参照してください。

# オープンソースの OpenSearch のクエリに Amazon Personalize Search Ranking プラグインを適用する
<a name="opensource-apply-plugin"></a>

Amazon Personalize Search Ranking プラグインは、OpenSearch インデックスのすべてのクエリとレスポンスに適用できます。このプラグインは個々の OpenSearch クエリとレスポンスに適用することもできます。
+  次の curl コマンドは、ローカルで実行されているオープンソース OpenSearch クラスター内の OpenSearch インデックスに検索パイプラインを適用します。この方法では、このインデックスでのすべての検索がプラグインを使用して検索結果にパーソナライゼーションを適用します。

  ```
  curl -XGET "https://localhost:9200/index/_settings" -ku 'admin:admin' --insecure -H 'Content-Type: application/json' -d'
  {
    "index.search.default_pipeline": "pipeline-name"
  }
  '
  ```
+ 次の curl コマンドは、ローカルで実行されているオープンソース OpenSearch クラスター内のインデックスで Toyota ブランド車を対象とする個別のクエリに検索パイプラインを適用します。

   `user_id` には、検索結果を取得するユーザーの ID を指定します。Amazon Personalize ソリューションバージョンの作成に使用したデータに、このユーザーが存在する必要があります。ユーザーが不在の場合、Amazon Personalize は人気に基づいてアイテムをランク付けします。`context` には、コンテキストメタデータを使用する場合は、デバイスタイプなどのユーザーのコンテキストメタデータを提供してください。`context` フィールドはオプションです。詳細については、「[コンテキストメタデータを使用したレコメンデーションの関連性の向上](contextual-metadata.md)」を参照してください。

  ```
  curl -XGET "http://localhost:9200/index/_search?search_pipeline=pipeline-name" -ku 'admin:admin' --insecure -H 'Content-Type: application/json' -d'
  {
    "query": {
      "multi_match": {
        "query": "Toyota",
        "fields": ["BRAND"]
      }
    },
    "ext": {
      "personalize_request_parameters": {
        "user_id": "USER ID",
        "context": { "DEVICE": "mobile phone" }
      }
    }
  }
  '
  ```

 結果がどのように再ランク付けされるかを理解するには、OpenSearch Dashboards を使用して OpenSearch の結果をプラグインで再ランク付けした結果と比較できます。詳細については、「[パーソナライズされた OpenSearch の結果を、パーソナライズされていない結果と比較する](opensource-comparing-results.md)」を参照してください。

 OpenSearch クエリにプラグインを適用すると、OpenSearch パイプラインのメトリクスを取得してプラグインを監視できます。詳細については、「[オープンソースの OpenSearch によるプラグインの監視](opensource-monitor.md)」を参照してください。

# パーソナライズされた OpenSearch の結果を、パーソナライズされていない結果と比較する
<a name="opensource-comparing-results"></a>

結果がどのように再ランク付けされるかを理解するために、2 つのブラウザウィンドウで[開発ツールコンソール](https://opensearch.org/docs/latest/dashboards/dev-tools/run-queries)を使用してクエリを実行できます。そうすれば、パーソナライゼーションの有無にかかわらずクエリの結果を比較できます。

**Dev Tools コンソールと結果を比較するには**

1. OpenSearch Dashboards がインストールされていることを確認してください。クイックスタート Bash スクリプトは OpenSearch ダッシュボードをインストールします。このスクリプトを使用しない場合や、すでにクラスターを実行している場合は、OpenSearch Dashboards をインストールする必要があります。詳細については、「[OpenSearch Dashboards のインストール](https://opensearch.org/docs/latest/install-and-configure/install-dashboards/index/)」を参照してください。

1. OpenSearch Dashboards を起動します。ブラウザから `http://localhost:5601` を開き、OpenSearch Dashboards にサインインします。デフォルトの認証情報は、ユーザー名は「admin」、パスワードは「admin」です。

1. OpenSearch Dashboards ホームページの「管理」メニューで**[開発ツール]** を選択します。

1. 別のブラウザウィンドウを開き、Dev Tools コンソールをもう一度開きます。前のウィンドウの URL を使用できます。

1. 1 つのウィンドウに、パーソナライゼーションのための再ランク付けを一切使用しないクエリを入力します。もう一方のウィンドウでは、`personalized_search_ranking` レスポンスプロセッサのパイプラインを使用する curl コマンドを入力します。curl コマンドをコンソールに直接貼り付けると、コマンドはコンソールが使用する形式に自動的に変換されます。コマンドの例については、「[オープンソースの OpenSearch のクエリに Amazon Personalize Search Ranking プラグインを適用する](opensource-apply-plugin.md)」を参照してください。

1. 両方のクエリを実行し、結果を比較します。

# オープンソースの OpenSearch によるプラグインの監視
<a name="opensource-monitor"></a>

Amazon Personalize Search Ranking プラグインを OpenSearch クエリに適用すると、検索パイプラインのメトリックスを取得してプラグインを監視できます。パイプラインメトリックスには、`personalized_search_ranking` レスポンスプロセッサの失敗したリクエスト数などの統計が含まれます。

 次のコードを使用して、すべてのパイプラインのメトリクスを取得できます。レスポンスにはすべての検索パイプラインの統計が含まれます。パイプラインメトリクスの例については、「[パイプラインメトリクスの例](monitor-response.md)」を参照してください。

```
curl -XGET "https://localhost:9200/_nodes/stats/search_pipeline?pretty" -ku 'admin:admin'
```