这是与 Recommendations AI、Retail Search 和新的 Retail 控制台相关的文档。如需在受限 GA 阶段使用 Retail Search,请与 Cloud 销售人员联系

如果您仅使用 Recommendations AI,请保留在 Recommendations 控制台上并参阅 Recommendations AI 文档

导入目录信息

本页介绍了如何将您的目录信息导入 Retail API,并使其保持最新。

此页面上的导入过程同时适用于 Recommendations AI 和 Retail Search。将数据导入 Retail API 后,这两项服务都可以使用该数据,因此如果同时使用这两种服务,则无需两次导入相同的数据。

准备工作

在导入目录信息之前,您必须已完成准备工作中的说明,特别是设置项目创建服务帐号将服务帐号添加到本地环境

您必须拥有 Retail Admin IAM 角色才能执行导入。

目录导入最佳做法

Retail API 需要使用高品质数据生成高质量的结果。如果您的数据缺少字段或具有占位值而非实际值,则预测和搜索结果的质量将受到影响。

导入目录数据时,请确保实现以下最佳做法:

  • 在上传任何数据之前,请务必先查看商品级别信息

    在导入任何数据后更改商品级别需要花费大量精力。

  • 遵守商品导入限制。

    从 Cloud Storage 批量导入数据时,每个文件的大小不能超过 2 GB。一个批量导入请求中最多可以包含 100 个文件。

    对于内嵌导入,一次最多可导入 5000 个商品。

  • 请确保包含所有必需的目录信息,并且信息正确无误。

    请勿使用虚拟值或占位值。

  • 请添加尽可能多的可选目录信息。

  • 确保您的事件都使用一种货币,尤其是如果您计划使用 Cloud Console 获取收入指标。Retail API 不支持每个目录使用多种货币。

  • 使目录保持最新。

    理想情况下,您应每天更新目录。安排定期目录导入可防止模型质量逐渐降低。使用 Cloud Console 导入目录时,您可以安排自动进行周期性导入。或者,您也可以使用 Google Cloud Scheduler 自动执行导入。

  • 对于尚未导入的商品项,请勿记录其用户事件。

  • 导入目录信息后,请查看项目的错误报告和日志记录信息

    有少数错误是正常的,但是如果有大量错误,则应检查这些错误并修复导致错误的所有进程问题。

关于导入目录数据

您可以从 Merchant CenterCloud StorageBigQuery 导入商品数据,也可以在请求中指定内嵌的数据。每个过程都是一次性导入,但将 Merchant Center 与 Retail API 关联除外。安排定期导入目录(理想情况下为每日)以确保您的目录为最新状态。请参阅使您的目录保持最新状态

您还可以导入单件商品。如需了解详情,请参阅上传商品项

目录导入注意事项

本部分介绍了可用于批量导入目录数据的方法、何时可以使用每种方法,以及这些方法的一些限制。

Cloud Storage 说明 从加载到 Cloud Storage 存储桶中的文件导入 JSON 格式的数据。每个文件不得超过 2 GB,一次最多可导入 100 个文件。可以使用 Cloud Console 或 curl 完成导入操作。使用 Product JSON 数据格式,该格式允许自定义属性。
使用时间 您需要在单个步骤中加载大量数据时。
限制 不适合频繁更新商品目录和价格的目录,因为更改不会立即生效。
BigQuery 说明 从使用 Retail 架构的先前加载的 BigQuery 表中导入数据。可以使用 Cloud Console 或 curl 执行。
使用时间 您的产品目录包含许多特性时。BigQuery 导入使用 Retail 架构,该架构具有的产品特性比其他导入选项多(包括键值对自定义特性)。

您有大量数据时。BigQuery 导入没有数据限制。

您已在使用 BigQuery 时。
限制 需要额外执行创建映射到 Retail 架构的 BigQuery 表这一步骤。
Merchant Center 同步 说明 将帐号与 Retail API 相关联,通过 Merchant Center 导入目录数据。关联后,对 Merchant Center 中目录数据的更新会实时同步到 Retail API。
使用时间 已与 Merchant Center 集成时。
限制 架构支持受限。例如,Merchant Center 不支持产品集合。在 Merchant Center 取消关联之前,它是数据的可靠来源,因此必须将所有所需的自定义特性添加到 Merchant Center 数据中。

控制受限。您无法指定要从 Merchant Center 导入的某些字段或商品集:Merchant Center 中现有的所有商品和字段都会导入。
内嵌导入 说明 通过调用 Product.import 方法导入。 使用 ProductInlineSource 对象,该对象具有的产品目录特性比 Retail 架构少,但支持自定义特性。
使用时间 如果您有非关系型平面目录数据,或者数量或价格更新的频率较高。
限制 一次最多只能导入 100 个目录商品。但是,可以执行许多加载步骤;没有商品限制。

从 Merchant Center 导入目录数据

Merchant Center 是一种工具,可让您用来使门店数据和商品数据可供购物广告和其他 Google 服务使用。

您可以通过以下方式从 Merchant Center 导入目录数据:

  • 作为一次性过程批量导入(仅限 Recommendations AI)。

  • 将您的 Merchant Center 帐号与 Retail API 关联。关联后,Merchant Center 帐号中的更改会不断同步到 Retail API。

从 Merchant Center 批量导入

您可以使用 Retail Cloud Console 或 products.import 方法从 Merchant Center 导入目录数据。批量导入是一次性过程,仅支持 Recommendations AI。

要从 Merchant Center 导入目录,请完成以下步骤:

  1. 按照 Merchant Center 转移作业中的说明,设置从 Merchant Center 到 BigQuery 的转移作业。

    您将使用 Google Merchant Center 商品表架构。将转移作业配置为每天重复,但将数据集过期时间设置为 2 天。

  2. 如果您的 BigQuery 数据集位于其他项目中,请配置所需的权限,以便 Retail API 可以访问 BigQuery 数据集。了解详情

  3. 将目录数据从 BigQuery 导入 Retail API。

    控制台

    1. 转到 Google Cloud Console 中的“Retail 数据”页面。

      转到“数据”页面

    2. 点击导入以打开“导入目录”面板。

    3. 选择商品清单

    4. 选择您要将目录上传到的分支。

    5. 选择 Merchant Center 作为数据源,选择 BigQuery 作为上传方法。

    6. 输入数据所在的 BigQuery 表格。

    7. (可选)输入项目中 Cloud Storage 存储桶的位置作为数据的临时位置。

      如果未指定,则使用默认位置。如果指定,BigQuery 和 Cloud Storage 存储分区必须位于同一地区内。

    8. 选择是否安排定期上传目录数据。

    9. 如果这是您第一次导入目录,或者在完全清除后重新导入目录,请选择产品级别。详细了解商品级别。

      在导入任何数据后更改商品级别需要花费大量精力。

    10. 点击导入

    curl

    1. 如果这是您第一次上传目录,或者要在完全清除后重新导入目录,请使用 Catalog.patch 方法设置产品级别。此操作需要 Retail Admin 角色。 详细了解商品级别。

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      --data '{
      "productLevelConfig": {
        "ingestionProductType": "PRODUCT_TYPE",
        "merchantCenterProductIdField": "PRODUCT_ID_FIELD"
      }
      }' \
      "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog"
    2. 使用 Products.import 方法导入目录。

      • DATASET_ID:BigQuery 数据集的 ID。
      • TABLE_ID:存放数据的 BigQuery 表的 ID。
      • STAGING_DIRECTORY:可选。在导入到 BigQuery 之前用作数据的临时位置的 Cloud Storage 目录。将此字段留空可让 Retail API 自动创建临时目录(推荐)。
      • ERROR_DIRECTORY:可选。存放与导入有关的错误信息的 Cloud Storage 目录。将此字段留空可让 Retail API 自动创建临时目录(推荐)。
      • dataSchema:对于 dataSchema 属性,请使用值 product_merchant_center。请参阅 Merchant Center 商品表架构

      我们建议您不要指定暂存目录或错误目录,以便 Retail API 可以使用新的暂存和错误目录自动创建 Cloud Storage 存储分区。这些目录在 BigQuery 数据集所在的区域中创建,并且对每个导入作业都是唯一的(这样可以防止多个导入作业将数据暂存到同一目录和重新导入相同的数据)。三天后,系统会自动删除存储分区和目录,以减少存储费用。

      自动创建的存储分区名称包含项目 ID、存储分区区域和数据架构名称,并以下划线分隔(例如 4321_us_catalog_retail)。自动创建的目录称为 stagingerrors,后跟一个数字(例如 staging2345errors5678)。

      如果指定目录,Cloud Storage 存储分区必须与 BigQuery 数据集位于同一区域,否则导入将失败。以 gs://<bucket>/<folder>/ 格式指定暂存和错误目录;二者应为不同的目录。

      curl -X POST \
           -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
           -H "Content-Type: application/json; charset=utf-8" \
           --data '{
             "inputConfig":{
                "bigQuerySource": {
                  "datasetId":"DATASET_ID",
                  "tableId":"TABLE_ID",
                  "dataSchema":"product_merchant_center"
                }
              }
          }' \
         "https://retail.googleapis.com/v2/projects/[PROJECT_NUMBER]/locations/global/catalogs/default_catalog/branches/0/products:import"
    

将 Merchant Center 与 Retail API 同步

如需在 Merchant Center 和 Retail API 之间持续同步,您可以将您的 Merchant Center 帐号与 Retail API 关联。关联后,Merchant Center 帐号中的目录信息会立即导入 Retail API。

Retail API 与 Merchant Center 帐号关联后,对 Merchant Center 帐号中商品数据的更改会在几分钟内在 Retail API 中自动更新。如果您希望阻止 Merchant Center 将更改同步到 Retail API,可以解除与 Merchant Center 帐号的关联。

解除与 Merchant Center 帐号的关联不会删除 Retail API 中的任何商品。如需删除导入的商品,请参阅删除商品信息

如需同步您的 Merchant Center 帐号,请完成以下步骤。

控制台

  1. 转到 Google Cloud Console 中的“Retail 数据”页面。

    转到“数据”页面

  2. 点击导入以打开导入面板。

  3. 选择产品目录

  4. 选择 Merchant Center Sync 作为数据源。

  5. 选择您的 Merchant Center 帐号。

  6. 选择要从中导入的 Merchant Center 目标位置。

  7. 选择您要将目录上传到的分支。

  8. 点击导入

curl

  1. 检查本地环境中的服务帐号是否有权访问 Merchant Center 帐号和 Retail API。如需查看哪些帐号有权访问您的 Merchant Center 帐号,请参阅 Merchant Center 的用户访问权限

  2. 使用 Catalog.patch 方法建立关联。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
     --data '{
        "merchantCenterLinkingConfig": {
          "links": [{
             merchantCenterAccountId: MERCHANT_CENTER_ID,
             destinations: ["DESTINATION_1", "DESTINATION_2", ...]
             branchId: "BRANCH_ID"
          }]
        }
     }' \
     "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog?updateMask=merchantCenterLinkingConfig"
    
    • MERCHANT_CENTER_ID:Merchant Center 帐号的 ID。
    • BRANCH_ID:要与其建立关联的分支的 ID。接受的值为“0”、“1”或“2”。
    • DESTINATION:Merchant Center 目标位置。至少需要一个目标位置值您可以使用 Merchant Center 目的位置文档中列出的支持值的任意组合。

要查看关联的 Merchant Center,请转到 Cloud Console 数据页面,然后点击页面右上角的 Merchant Center 按钮。这将打开关联的 Merchant Center 帐号面板。您还可以通过此面板添加其他 Merchant Center 帐号。

请参阅查看目录的汇总信息,了解如何查看已导入到 Retail API 中的商品的说明。

取消关联 Merchant Center 帐号会停止该帐号将目录数据同步到 Retail API。此过程不会删除 Retail API 中已上传的任何产品。

控制台

  1. 转到 Google Cloud Console 中的“Retail 数据”页面。

    转到“数据”页面

  2. 点击页面右上角的 Merchant Center 按钮,打开关联的 Merchant Center 帐号列表。

  3. 点击要解除关联的 Merchant Center 帐号旁边的解除关联,然后在显示的对话框中确认您的选择。

curl

使用 Catalog.patch 方法从 Catalog 资源中移除关联配置。

curl -X PATCH \
 -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
 -H "Content-Type: application/json; charset=utf-8" \
 --data '{
    "merchantCenterLinkingConfig": {}
 }' \
 "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog?updateMask=merchantCenterLinkingConfig"

与 Merchant Center 关联的限制

  • 一个 Merchant Center 帐号可以与任意数量的目录分支相关联,但单个目录分支只能与一个 Merchant Center 帐号相关联。

  • 关联 Merchant Center 帐号后首次导入可能需要几个小时才能完成。所需时间取决于 Merchant Center 帐号中的商品/服务数量。

  • 对于与 Merchant Center 帐号关联的分支,使用 Retail API 方法的所有商品修改都将被停用。对这些分支中的产品目录数据所做的任何更改都必须使用 Merchant Center 进行。然后,这些更改会自动同步到 Retail API。

  • 使用 Merchant Center 关联的分支不支持集合商品类型。

  • 为了确保数据正确性,您的 Merchant Center 帐号只能与空目录分支关联。如需从目录分支中删除产品,请参阅删除产品信息

从 BigQuery 导入目录数据

要从 BigQuery 以正确的格式导入目录数据,请使用 Recommendations AI 架构以正确格式创建 BigQuery 表,并加载空表和目录数据。然后,将您的数据上传到 Retail API。

如需有关 BigQuery 表的更多帮助,请参阅表简介。如需有关 BigQuery 查询的帮助,请参阅查询 BigQuery 数据概览

要导入目录,请执行以下操作:

  1. 如果您的 BigQuery 数据集位于其他项目中,请配置所需的权限,以便 Retail API 可以访问 BigQuery 数据集。了解详情

  2. 将目录数据导入 Retail API。

    控制台

    1. 转到 Google Cloud Console 中的“Retail 数据”页面。

      转到“数据”页面

    2. 点击导入以打开“导入目录”面板。

    3. 选择商品清单

    4. 选择您要将目录上传到的分支。

    5. 选择 BigQuery 作为数据源,选择 Retail Product Catalogs Schema 作为架构。

    6. 输入数据所在的 BigQuery 表格。

    7. (可选)输入项目中 Cloud Storage 存储桶的位置作为数据的临时位置。

      如果未指定,则使用默认位置。如果指定,BigQuery 和 Cloud Storage 存储分区必须位于同一地区内。

    8. (可选)选择是否要安排定期上传目录。

      只有在已成功将目录成功导入 Retail API 一次之后,此选项才可用。

    9. 如果这是您第一次导入目录,或者在完全清除后重新导入目录,请选择产品级别。详细了解商品级别。

      在导入任何数据后更改商品级别需要花费大量精力。

    10. 点击导入

    curl

    1. 如果这是您第一次上传目录,或者要在完全清除后重新导入目录,请使用 Catalog.patch 方法设置产品级别。此操作需要 Retail Admin 角色。

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
       --data '{
         "productLevelConfig": {
           "ingestionProductType": "PRODUCT_TYPE",
           "merchantCenterProductIdField": "PRODUCT_ID_FIELD"
         }
       }' \
      "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog"
      
    2. 为导入作业的输入参数创建一个数据文件。

      使用 BigQuerySource 对象指向 BigQuery 数据集。

      • DATASET_ID:BigQuery 数据集的 ID。
      • TABLE_ID:存放数据的 BigQuery 表的 ID。
      • PROJECT_ID:BigQuery 来源所在的项目 ID。如果未指定,则项目 ID 继承自父请求。
      • STAGING_DIRECTORY:可选。在导入到 BigQuery 之前用作数据的临时位置的 Cloud Storage 目录。将此字段留空可让 Retail API 自动创建临时目录(推荐)。
      • ERROR_DIRECTORY:可选。存放与导入有关的错误信息的 Cloud Storage 目录。将此字段留空可让 Retail API 自动创建临时目录(推荐)。
      • dataSchema:对于 dataSchema 属性,请使用值 product(默认值)。您将使用 Retail 架构

      我们建议您不要指定暂存目录或错误目录,以便 Retail API 可以使用新的暂存和错误目录自动创建 Cloud Storage 存储分区。这些目录在 BigQuery 数据集所在的区域中创建,并且对每个导入作业都是唯一的(这样可以防止多个导入作业将数据暂存到同一目录和重新导入相同的数据)。三天后,系统会自动删除存储分区和目录,以减少存储费用。

      自动创建的存储分区名称包含项目 ID、存储分区区域和数据架构名称,并以下划线分隔(例如 4321_us_catalog_retail)。自动创建的目录称为 stagingerrors,后跟一个数字(例如 staging2345errors5678)。

      如果指定目录,Cloud Storage 存储分区必须与 BigQuery 数据集位于同一区域,否则导入将失败。以 gs://<bucket>/<folder>/ 格式指定暂存和错误目录;二者应为不同的目录。

      {
         "inputConfig":{
           "bigQuerySource": {
             "projectId":"PROJECT_ID",
             "datasetId":"DATASET_ID",
             "tableId":"TABLE_ID",
             "dataSchema":"product"}
            }
      }
      
    3. Products:import REST 方法发出 POST 请求,并提供数据文件的名称(此处显示为 input.json),以将您的目录信息导入到 Retail API 中。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" -d @./input.json \
      "https://retail.googleapis.com/v2/projects/[PROJECT_NUMBER]/locations/global/catalogs/default_catalog/branches/0/products:import"
      

      您可以使用 API 以编程方式检查状态。您应该会收到类似如下所示的响应对象:

      {
      "name": "projects/[PROJECT_ID]/locations/global/catalogs/default_catalog/operations/import-products-123456",
      "done": false
      }
      

      名称字段是操作对象的 ID。要请求此对象的状态,请将名称字段替换为 import 方法返回的值,直到 done 字段返回 true

      curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog/operations/import-products-123456"
      

      操作完成后,返回的对象的 done 值为 true,并且包含一个类似于以下示例的 Status 对象:

      { "name": "projects/[PROJECT_ID]/locations/global/catalogs/default_catalog/operations/import-products-123456",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.retail.v2.ImportMetadata",
        "createTime": "2020-01-01T03:33:33.000001Z",
        "updateTime": "2020-01-01T03:34:33.000001Z",
        "successCount": "2",
        "failureCount": "1"
      },
      "done": true,
      "response": {
      "@type": "type.googleapis.com/google.cloud.retail.v2.ImportProductsResponse",
      },
      "errorsConfig": {
        "gcsPrefix": "gs://error-bucket/error-directory"
      }
      }
      

      您可以检查 Cloud Storage 错误目录中的文件,了解导入过程中是否出现错误。

设置对 BigQuery 数据集的访问权限

如果 BigQuery 数据集与 Retail 服务属于不同的项目,要设置访问权限,请完成以下步骤。

  1. 在 Cloud Console 中打开 IAM 页面。

    打开 IAM 页面

  2. 选择您的 Retail 项目。

  3. 找到名为 Retail Service Account 的服务帐号。

    如果您之前未曾使用过 Retail API 启动导入操作,则此服务帐号可能未列出。如果您没有看到此服务帐号,请返回导入任务并启动导入。当由于权限错误而失败时,请返回此处完成此任务。

  4. 复制服务帐号的标识符,类似于电子邮件地址(例如 service-525@gcp-sa-retail.iam.gserviceaccount.com)。

  5. 切换到 BigQuery 项目(在同一 IAM 和管理页面上),然后点击添加

  6. 输入 Retail 服务帐号的标识符,然后选择 BigQuery > BigQuery User 角色。

  7. 点击添加其他角色,然后选择 BigQuery > BigQuery Data Editor

    如果您不想向整个项目提供 Data Editor 角色,则可以将此角色直接添加到数据集。了解详情

  8. 点击保存

从 Cloud Storage 导入目录数据

如需导入 JSON 格式的目录数据,您需要创建一个或多个 JSON 文件,其中包含要导入的目录数据,然后将其上传到 Cloud Storage。然后,您可以将它导入 Retail API。

如需查看 JSON 商品项格式的示例,请参阅商品项 JSON 数据格式

如需有关将文件上传到 Cloud Storage 方面的帮助,请参阅上传对象

  1. 确保 Retail 服务帐号具有对存储分区执行读写操作的权限

    Retail 服务帐号在 Cloud Console 的 IAM 页面中列出,名称为 Retail 服务帐号。将帐号添加到存储分区权限时,请使用服务帐号的标识符(类似于电子邮件地址,例如 service-525@gcp-sa-retail.iam.gserviceaccount.com)。

  2. 将目录数据导入 Retail API。

    控制台

    1. 转到 Google Cloud Console 中的“Retail 数据”页面。

      转到“数据”页面

    2. 点击导入以打开“导入目录”面板。

    3. 选择商品清单

    4. 选择您要将目录上传到的分支。

    5. 选择 Cloud Storage 作为数据源,选择 Retail Product Catalogs Schema 作为架构。

    6. 输入数据的 Cloud Storage 位置。

    7. (可选)输入项目中 Cloud Storage 存储桶的位置作为数据的临时位置。

      如果未指定,则使用默认位置。如果指定,BigQuery 和 Cloud Storage 存储分区必须位于同一地区内。

    8. (可选)选择是否要安排定期上传目录。

      只有在已成功将目录成功导入 Retail API 一次之后,此选项才可用。

    9. 如果这是您第一次导入目录,或者在完全清除后重新导入目录,请选择您的产品级别。详细了解商品级别。

      在导入任何数据后更改商品级别需要花费大量精力。

    10. 点击导入

    curl

    1. 如果这是您第一次上传目录,或者要在完全清除后重新导入目录,请使用 Catalog.patch 方法设置产品级别。详细了解商品级别。

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
       --data '{
         "productLevelConfig": {
           "ingestionProductType": "PRODUCT_TYPE",
           "merchantCenterProductIdField": "PRODUCT_ID_FIELD"
         }
       }' \
      "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog"
      
    2. 为导入作业的输入参数创建一个数据文件。您可以使用 GcsSource 对象指向您的 Cloud Storage 存储分区。

      您可以提供多个文件,也可以只提供一个文件;本例使用了两个文件。

      • INPUT_FILE:Cloud Storage 中包含目录数据的一个或多个文件。
      • ERROR_DIRECTORY:存放与导入有关的错误信息的 Cloud Storage 目录。

      输入文件字段必须采用 gs://<bucket>/<path-to-file>/ 格式。错误目录必须采用 gs://<bucket>/<folder>/ 格式。如果错误目录不存在,Retail API 会创建它。存储分区必须已存在。

      {
      "inputConfig":{
       "gcsSource": {
         "inputUris": ["INPUT_FILE_1", "INPUT_FILE_2"]
        }
      },
      "errorsConfig":{"gcsPrefix":"ERROR_DIRECTORY"}
      }
      
    3. Products:import REST 方法发出 POST 请求,并提供数据文件的名称(此处显示为 input.json),以将您的目录信息导入到 Retail API 中。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
      -H "Content-Type: application/json; charset=utf-8" -d @./input.json"
      "https://retail.googleapis.com/v2/projects/[PROJECT_NUMBER]/locations/global/catalogs/default_catalog/branches/0/products:import"
      

      要检查导入操作的状态,最简单的方法是使用 Cloud Console。如需了解详情,请参阅查看特定集成操作的状态

      您还可以使用 API 以编程方式检查状态。您应该会收到类似如下所示的响应对象:

      {
      "name": "projects/[PROJECT_ID]/locations/global/catalogs/default_catalog/operations/import-products-123456",
      "done": false
      }
      

      名称字段是操作对象的 ID。您可以请求此对象的状态,将名称字段替换为导入方法返回的值,直到 done 字段返回 true

      curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      "https://retail.googleapis.com/v2/projects/[PROJECT_ID]/locations/global/catalogs/default_catalog/operations/[OPERATION_NAME]"
      

      操作完成后,返回的对象的 done 值为 true,并且包含一个类似于以下示例的 Status 对象:

      { "name": "projects/[PROJECT_ID]/locations/global/catalogs/default_catalog/operations/import-products-123456",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.retail.v2.ImportMetadata",
        "createTime": "2020-01-01T03:33:33.000001Z",
        "updateTime": "2020-01-01T03:34:33.000001Z",
        "successCount": "2",
        "failureCount": "1"
      },
      "done": true,
      "response": {
      "@type": "type.googleapis.com/google.cloud.retail.v2.ImportProductsResponse",
      },
      "errorsConfig": {
        "gcsPrefix": "gs://error-bucket/error-directory"
      }
      }
      

      您可以检查 Cloud Storage 错误目录中的文件,以查看导入期间发生的错误类型。

以内嵌方式导入目录数据

curl

通过向 Products:import 方法发出 POST 请求,并使用 productInlineSource 对象指定目录数据,可以内嵌方式将目录信息导入到 Retail API 中。

如需查看 JSON 商品项格式的示例,请参阅商品项 JSON 数据格式

  1. 为您的商品创建 JSON 文件,并将其命名为 ./data.json

    {
    "inputConfig": {
    "productInlineSource": {
      "products": [
        {
          <product1>
        },
        {
          <product2>
        },
        ....
      ]
    }
    }
    }
    
  2. 调用 POST 方法:

    curl -X POST \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     --data @./data.json \
    "https://retail.googleapis.com/v2/projects/[PROJECT_NUMBER]/locations/global/catalogs/default_catalog/branches/0/products:import"
    

Java

public static String importProductsFromInlineSource(
    List<Product> productsToImport)
    throws IOException, InterruptedException, ExecutionException {
  ProductServiceClient productClient = getProductServiceClient();

  ProductInlineSource inlineSource = ProductInlineSource.newBuilder()
      .addAllProducts(productsToImport)
      .build();

  ProductInputConfig inputConfig = ProductInputConfig.newBuilder()
      .setProductInlineSource(inlineSource)
      .build();

  ImportProductsRequest importRequest = ImportProductsRequest.newBuilder()
      .setParent(IMPORT_PARENT)
      .setRequestId(REQUEST_ID)
      .setReconciliationMode(ReconciliationMode.INCREMENTAL)
      .setInputConfig(inputConfig)
      .build();

  String operationName = productClient
      .importProductsAsync(importRequest).getName();

  productClient.shutdownNow();
  productClient.awaitTermination(2, TimeUnit.SECONDS);

  return operationName;
}

产品项 JSON 数据格式

JSON 文件中的 Product 条目应如以下示例所示。换行符是为了方便阅读;您应该在一行中提供整个商品项。每个商品项应独占一行。

至少填充以下必填字段:

{
  "id": "1234",
  "categories": "Apparel & Accessories > Shoes",
  "title": "ABC sneakers"
}
{
  "id": "5839",
  "categories": "casual attire > t-shirts",
  "title": "Crew t-shirt"
}

完成对象:

{
  "name": "projects/[PROJECT_NUMBER]/locations/global/catalogs/default_catalog/branches/0/products/1234",
  "id": "1234",
  "categories": "Apparel & Accessories > Shoes",
  "title": "ABC sneakers",
  "description": "Sneakers for the rest of us",
  "attributes": { "vendor": {"text": ["vendor123", "vendor456"]} },
  "language_code": "en",
  "tags": [ "black-friday" ],
  "priceInfo": {"currencyCode": "USD", "price":100, "originalPrice":200, "cost": 50},
  "availableTime": "2020-01-01T03:33:33.000001Z",
  "availableQuantity": "1",
  "uri":"http://example.com",
  "images": [{"uri": "http://example.com/img1", "height": 320, "width": 320 }]
}

历史目录数据

Retail API 支持导入和管理历史目录数据。使用历史用户事件进行模型训练时,历史目录数据会很有帮助。Retail API 可以使用过去的产品信息来丰富历史用户事件数据并提高模型准确率。

历史产品存储为过期产品。它们不会在搜索响应中返回,但对 UpdateListDelete API 调用可见。

导入历史目录数据

如果产品的 expireTime 字段设置为过去的时间戳,则此产品将被视为历史产品。为了避免影响 Recommendations AI,请将产品可用性设置为 OUT_OF_STOCK

我们建议您使用以下方法导入历史目录数据:

调用 Product.Create 方法

使用 Product.Create 方法创建一个 Product 条目,并将 expireTime 字段设置为过去的时间戳。

内嵌导入过期产品

这些步骤与常规内嵌导入相同,但产品应将 expireTime 字段设置为过去的时间戳。

内嵌导入请求中使用的 ./data.json 示例:

{
"inputConfig": {
  "productInlineSource": {
      "products": [
        {
          "name": "historical product 001"
          "id": "historical_product_001"
          "name": "A historical product"
          "expire_time": {
            "second": 1000000000  // a past timestamp
          }
        },
        {
          <Another product>
        },
        ....
      ]
    }
  }
}

从 BigQuery 或 Cloud Storage 导入过期产品

此过程类似于从 BigQueryCloud Storage 导入常规产品。但是,请务必将 expireTime 字段设置为过去的时间戳。

使目录保持最新

Retail API 依赖于当前商品信息才能为您提供最佳结果。建议您每天导入目录,以确保目录是最新的。您可以使用 Google Cloud Scheduler 安排导入时间,也可以在使用 Cloud Console 导入数据时选择自动安排选项。

您可以只更新新商品项或发生更改的商品项,也可以导入整个目录。如果您导入目录中已有的商品,系统不会再次添加这些商品。系统会更新所有发生更改的项。

要更新某个单独的项,请参阅更新目录信息

批量更新

您可以使用导入方法来批量更新目录。此操作方法与首次导入相同;请按照导入目录数据中的步骤操作。

监控导入运行状况

如需确保导入的数据没有错误,您可以在 Retail 数据页面上查看目录的数据加载指标。Retail Data 页面还会显示目录中商品数据的质量指标

为了获得高质量的结果,保持目录保持最新至关重要。您应监控导入错误率,并在需要时采取措施。如需了解详情,请参阅设置提醒

后续步骤