

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 網域資料集群組入門 (SDK for JavaScript v3)
<a name="getting-started-domain-js"></a>

本教學課程說明如何使用 適用於 JavaScript 的 AWS SDK v3 為 VIDEO\$1ON\$1DEMAND 網域建立網域資料集群組。在本教學課程中，您會為使用案例建立*最佳挑選*的推薦者。

 若要在 GitHub 上檢視本教學中使用的程式碼，請參閱《SDK [程式碼範例儲存庫》中適用於 JavaScript v3 的 SDK 的 Amazon Personalize](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/personalize) 程式碼範例。* AWS *

當您完成入門練習時，為了避免產生不必要的費用，請刪除您建立的資源。如需詳細資訊，請參閱[刪除 Amazon Personalize 資源的需求](deleting-resources.md)。

**Topics**
+ [先決條件](#gs-js-sdk-domain-prerequisites)
+ [教學課程](#domain-gs-js-domain-tutorial)

## 先決條件
<a name="gs-js-sdk-domain-prerequisites"></a>

以下是完成本教學課程的先決條件步驟：
+ 完成 [入門先決條件](gs-prerequisites.md)以設定所需的許可並建立訓練資料。如果您也已完成 [網域資料集群組入門 （主控台）](getting-started-console-domain.md)，則可以重複使用相同的來源資料。如果您使用自己的來源資料，請確定您的資料格式與先決條件相同。
+ 如《 *適用於 JavaScript 的 AWS SDK 開發人員指南*》中的設定適用於 JavaScript 的 SDK 程序所指定，[設定適用於 JavaScript 的 SDK](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-up.html) 和 AWS 登入資料。

## 教學課程
<a name="domain-gs-js-domain-tutorial"></a>

在下列步驟中，您會安裝所需的相依性。然後，您可以建立資料集群組、匯入資料、為您使用案例建立*最佳挑選*的建議者，以及取得建議。

如果您使用 Node.js，您可以將範例儲存為 JavaScript 檔案，然後執行 ，以執行每個程式碼範例`node <fileName.js>`。

### 步驟 1：安裝 Amazon Personalize 相依性
<a name="domain-gs-js-install-dependencies"></a>

完成先決條件後，請安裝下列 Amazon Personalize 相依性：
+ @aws-sdk/client-personalize
+ @aws-sdk/client-personalize-runtime
+ @aws-sdk/client-personalize-events （本教學課程為選用，但如果您想要在建立推薦者後[記錄事件](recording-events.md)，則為必要）

以下是`package.json`您可以使用的檔案範例。若要使用 Node.js 安裝相依性，請導覽至您儲存`package.json`檔案的位置並執行 `npm install`。

```
{
  "name": "personalize-js-project",
  "version": "1.0.0",
  "description": "personalize operations",
  "type": "module",
  "author": "Author Name <email@address.com>",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-personalize": "^3.350.0",
    "@aws-sdk/client-personalize-events": "^3.350.0",
    "@aws-sdk/client-personalize-runtime": "^3.350.0",
    "fs": "^0.0.1-security"
  },
  "compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true
  }
}
```

### 步驟 2：建立 Amazon Personalize 用戶端
<a name="domain-gs-js-clients"></a>

安裝相依性之後，請建立 Amazon Personalize 用戶端。在本教學課程中，程式碼範例假設您在名為 的檔案中建立用戶端，該檔案`personalizeClients.js`存放在名為 的目錄中`libs`。

以下是 `personalizeClient.js` 檔案的範例。

```
import { PersonalizeClient } from "@aws-sdk/client-personalize";
import { PersonalizeRuntimeClient } from "@aws-sdk/client-personalize-runtime";
import { PersonalizeEventsClient } from "@aws-sdk/client-personalize-events";
// Set your AWS region.
const REGION = "region"; //e.g. "us-east-1"

const personalizeClient = new PersonalizeClient({ region: REGION});
const personalizeEventsClient = new PersonalizeEventsClient({ region: REGION});
const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: REGION});

export { personalizeClient, personalizeEventsClient, personalizeRuntimeClient };
```

### 步驟 3：匯入資料
<a name="domain-gs-js-import-dataset"></a>

建立 Amazon Personalize 用戶端後，匯入您在完成 時建立的歷史資料[入門先決條件](gs-prerequisites.md)。若要將歷史資料匯入 Amazon Personalize，請執行下列動作：

1.  將下列 Avro 結構描述儲存為工作目錄中的 JSON 檔案。此結構描述符合您在完成 時所建立 CSV 檔案中的資料欄[建立訓練資料 （網域資料集群組）](gs-prerequisites.md#gs-data-prep-domain)。

   ```
   {
     "type": "record",
     "name": "Interactions",
     "namespace": "com.amazonaws.personalize.schema",
     "fields": [
         {
             "name": "USER_ID",
             "type": "string"
         },
         {
             "name": "ITEM_ID",
             "type": "string"
         },
         {
             "name": "EVENT_TYPE",
             "type": "string"
         },
         {
             "name": "TIMESTAMP",
             "type": "long"
         }
     ],
     "version": "1.0"
   }
   ```

1. 使用下列`createDomainSchema.js`程式碼在 Amazon Personalize 中建立網域結構描述。`SCHEMA_PATH` 將 取代為您剛建立之 schema.json 檔案的路徑。更新 `createSchemaParam`以指定結構描述的名稱，並`domain`指定 `VIDEO_ON_DEMAND`。

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateSchemaCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   import fs from "node:fs";
   
   const schemaFilePath = "SCHEMA_PATH";
   let mySchema = "";
   
   try {
     mySchema = fs.readFileSync(schemaFilePath).toString();
   } catch (err) {
     mySchema = "TEST"; // for unit tests.
   }
   
   // Set the domain schema parameters.
   export const createDomainSchemaParam = {
     name: "NAME" /* required */,
     schema: mySchema /* required */,
     domain:
       "DOMAIN" /* required for a domain dataset group, specify ECOMMERCE or VIDEO_ON_DEMAND */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateSchemaCommand(createDomainSchemaParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

1. 使用下列`createDomainDatasetGroup.js`程式碼在 Amazon Personalize 中建立網域資料集群組。更新 `domainDatasetGroupParams`以指定資料集群組的名稱，並`domain`指定 `VIDEO_ON_DEMAND`。

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetGroupCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the domain dataset group parameters.
   export const domainDatasetGroupParams = {
     name: "NAME" /* required */,
     domain:
       "DOMAIN" /* required for a domain dsg, specify ECOMMERCE or VIDEO_ON_DEMAND */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetGroupCommand(domainDatasetGroupParams),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

1. 使用下列`createDataset.js`程式碼在 Amazon Personalize 中建立項目互動資料集。更新 `createDatasetParam`以指定您剛建立之資料集群組和結構描述的 Amazon Resource Name (ARN)，為資料集命名，並為 `datasetType`指定 `Interactions`。

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the dataset's parameters.
   export const createDatasetParam = {
     datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
     datasetType: "DATASET_TYPE" /* required */,
     name: "NAME" /* required */,
     schemaArn: "SCHEMA_ARN" /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetCommand(createDatasetParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

1. 使用下列`createDatasetImportJob.js`程式碼匯入您的資料。更新 `datasetImportJobParam`以指定下列項目：
   + 指定任務的名稱，並指定互動資料集的 ARN。
   + 針對 `dataLocation`，指定您存放訓練資料的 Amazon S3 儲存貯體路徑 (`s3://https://amzn-s3-demo-bucket.s3.region-code.amazonaws.com/folder name/ratings.csv`)。
   + 針對 `roleArn`指定 Amazon Personalize 服務角色的 Amazon Resource Name。您已將此角色建立為 的一部分[入門先決條件](gs-prerequisites.md)。

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetImportJobCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the dataset import job parameters.
   export const datasetImportJobParam = {
     datasetArn: "DATASET_ARN" /* required */,
     dataSource: {
       /* required */
       dataLocation: "S3_PATH",
     },
     jobName: "NAME" /* required */,
     roleArn: "ROLE_ARN" /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetImportJobCommand(datasetImportJobParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

### 步驟 4：建立推薦者
<a name="domain-gs-js-create-recommender"></a>

資料集匯入任務完成後，您就可以建立建議者。若要建立推薦者，請使用下列`createRecommender.js`程式碼。`createRecommenderParam` 使用下列項目更新 ：指定建議者的名稱、指定資料集群組的 ARN，以及`recipeArn`指定 `arn:aws:personalize:::recipe/aws-vod-top-picks`。

```
// Get service clients module and commands using ES6 syntax.
import { CreateRecommenderCommand } from "@aws-sdk/client-personalize";
import { personalizeClient } from "./libs/personalizeClients.js";

// Or, create the client here.
// const personalizeClient = new PersonalizeClient({ region: "REGION"});

// Set the recommender's parameters.
export const createRecommenderParam = {
  name: "NAME" /* required */,
  recipeArn: "RECIPE_ARN" /* required */,
  datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new CreateRecommenderCommand(createRecommenderParam),
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

### 步驟 5：取得建議
<a name="domain-gs-js-get-recommendations"></a>

建立推薦者之後，您可以使用它來取得建議。使用下列`getRecommendations.js`程式碼取得使用者的建議。更新 `getRecommendationsParam`以指定您在上一個步驟中建立之推薦者的 ARN，並指定使用者 ID （例如 `123`)。

```
// Get service clients module and commands using ES6 syntax.
import { GetRecommendationsCommand } from "@aws-sdk/client-personalize-runtime";
import { personalizeRuntimeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"});

// Set the recommendation request parameters.
export const getRecommendationsParam = {
  recommenderArn: "RECOMMENDER_ARN" /* required */,
  userId: "USER_ID" /* required */,
  numResults: 15 /* optional */,
};

export const run = async () => {
  try {
    const response = await personalizeRuntimeClient.send(
      new GetRecommendationsCommand(getRecommendationsParam),
    );
    console.log("Success!", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```