更新 Vertex AI Search 零售解决方案的本地商品目录

LocalInventory 是与特定广告相关联的商品目录信息 地点,由其 place_id 标识。例如,您可以为提供特定价格的商店或地区创建 LocalInventoryLocalInventory 具有以下字段:

  • LocalInventory.price_info
  • LocalInventory.attributes
  • LocalInventory.fulfillment_types

现有 LocalInventory 条目可通过 Product.local_inventories 查看(fulfillment_types 除外,fulfillment_types 可通过 Product.fulfillment_info 获取,以实现向后兼容性)。此字段仅用于输出。设置 针对 Product CRUD API 的 Product.local_inventoriesSetInventory 没有 效果。

每个 (LocalInventory.place_id, LocalInventory.fulfillment_types[...]) 对都指向目录更新文档中提及的相同 (fulfillment_info.place_ids, fulfillment_info.type) 对。由 AddLocalInventoriesRemoveLocalInventories(如下所述)更新的 fulfillment_types 反映了将每个地点 ID 映射到其支持的 fulfillment 类型列表的映射,而由 AddFulfillmentPlacesRemoveFulfillmentPlaces 更新的 fulfillment_info 反映了将每个具体 fulfillment 类型映射到支持此类型的地点 ID 列表的映射。不过,这两种 API 都会修改相同的底层执行信息,并且这两种 API 的影响都会反映在 Product.fulfillment_info 中。

本地商品目录更新方法

更改商品的本地商品目录信息的频率要比更改目录信息的频率高得多。一组专用 的方法用于处理大量本地商品目录特有的 更新。这些方法是异步的,因为下游优化支持对每个商品同时执行数百个更新,而不会影响性能。

AddLocalInventories

AddLocalInventories 可用于创建本地 新地点的商品目录(以新的 place_id 表示),或更新现有的 字段。您可以通过 AddLocalInventoriesRequest.add_mask 指定在请求正文中的 LocalInventory 条目列表中添加或更新的字段。有效的 add_mask 值包括:

  • price_info:覆盖 LocalInventory.price_info
  • attributes:覆盖所有 LocalInventory.attributes。系统会移除请求正文中未提及的现有属性。
  • attributes.PLACEHOLDER_NAME:仅覆盖指定的自定义属性。如果请求中未提供现有属性名称,则系统会删除该属性。可以指定多个 attributes.PLACEHOLDER_NAME,只要每个属性名称都不同即可。不过,AddLocalInventoriesRequest.add_mask 在同一请求中不能同时包含 attributes 值和 attributes.PLACEHOLDER_NAME 值。
  • fulfillment_types:覆盖所有受支持的执行方式类型。请求正文中未提及的现有执行方式类型会被移除。

Proto

{
  product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
  local_inventories: {
    place_id: "store1"
    price_info: {
      currency_code: "USD"
      price: 100
      original_price: 110
      cost: 95
    }
    fulfillment_types: "pickup-in-store"
    fulfillment_types: "ship-to-store"
  }
  local_inventories: {
    place_id: "store2"
    price_info: {
      currency_code: "USD"
      price: 200
      original_price: 210
      cost: 195
    }
    attributes: {
      key: "attr1",
      value: {
        text: "store2_value"
      }
    }
    fulfillment_types: "custom-type-1"
  }
  add_mask: {
    paths: "price_info"
    paths: "attributes.attr1"
    paths: "fulfillment_types"
  }
  add_time: {
    seconds: 100
    nanos: 100
  }
  allow_missing: true
}
  

此示例 AddLocalInventoriesRequest 会为指定商品添加或更新两个具有放置 ID "store1""store2" 的本地商品目录。如果 store1 存在,但在请求之前 store2 不存在,则请求 将更新 store1 的字段,并使用给定的字段值创建 store2

AddLocalInventoriesRequest.add_mask 指定 price_info,即单个 名为“"attr1"”的自定义属性,且 fulfillment_types 应为 使用 AddLocalInventoriesRequest.local_inventories

attributes 是与地点相关联的属性,具有可自定义的名称和值。由于 store1LocalInventory 未在请求中提供 attr1 的值,因此系统会从 store1 的现有 LocalInventory(如果存在)中删除自定义属性 attr1store2 的属性 attr1 的值将设置为文本值 store2_value。其他现有自定义 store1store2 上的属性保持不变。

fulfillment_types 表示 Product。它与 fulfillment_info.type 相同,并接受与 fulfillment_info.type 相同的值。此 AddLocalInventoriesRequest 会指定: store1 支持 pickup-in-storeship-to-store 执行方式类型,而 store1 支持 custom-type-1。此次更新之前已存在的执行方式类型 要求中未提及的素材资源将被删除。

由于 AddLocalInventoriesRequest.allow_missing 设置为 true,因此即使商品尚不存在,系统也会存储更新后的本地商品目录信息,以供最终创建商品时使用。更新带有时间戳 与 AddLocalInventoriesRequest.add_time 搭配使用,以防止 替换这些地点 ID 的指定字段。详细了解如何防止 更新过时,并存储本地产品目录信息, 创建,请参阅 适用于本地商品目录更新的时间戳保护措施预加载商品目录信息

Proto

{
  product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
  local_inventories: {
    place_id: "store3"
    attributes: {
      key: "attr1",
      value: {
        text: "attr1_value"
      }
    }
    attributes: {
      key: "attr2",
      value: {
        numbers: 123
      }
    }
  }
  add_mask: {
    paths: "attributes"
  }
  add_time: {
    seconds: 100
    nanos: 100
  }
}
  

此示例 AddLocalInventoriesRequest 会为指定商品添加或更新一个地点 ID 为 "store3" 的本地商品目录。由于 add_mask 包含 "attributes",以及 store3 的所有现有自定义属性 并按照请求中指定的方式替换为 attr1attr2。 请注意,由于未设置 allow_missing,因此需要指定商品 存在。否则,会抛出 NOT_FOUND 错误。

RemoveLocalInventories

RemoveLocalInventories 可用于移除具有给定地点 ID 的地点的现有本地商品目录。

Proto

{
  product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
  place_ids: "store1"
  place_ids: "store2"
  remove_time: {
    seconds: 100
    nanos: 100
  }
  allow_missing: true
}
  

此示例 RemoveLocalInventoriesRequest 移除了地点的本地商品目录 使用指定商品的地点 ID "store1""store2"。更新 带有 RemoveLocalInventoriesRequest.remove_time 时间戳,以防止 过时更新。对于指定的 没有本地商品目录的地点 ID,则请求还会记录其 将时间更新为 remove_time。如需详细了解更新时间戳,请参阅 适用于本地商品目录更新的时间戳保护措施

本地商品目录更新的时间戳保护措施

为防止无序更新,每个本地商品目录字段 最新更新时间相关联。

系统会为每个(place_id, price_info)记录最新更新时间, (place_id, attributes[...])(place_id, fulfillment_types[...]) 对。

AddLocalInventoriesRemoveLocalInventories 方法允许调用方 指定发出请求的更新时间。系统会将此更新时间与为相关商品目录字段记录的最新更新时间进行比较;当更新时间完全晚于最新更新时间时,才会提交更新。

例如,假设地点 ID "store1"price_info 包含最后一次记录的日期 更新时间设为了 T。如果RemoveLocalInventoriesRequest.place_ids 包含“"store1"”,该请求将从“"store1"”中移除“price_info” 仅当 RemoveLocalInventoriesRequest.remove_time 晚于时间 T 时。 RemoveLocalInventoriesRequest 也是如此。

在时间戳保护下, RemoveLocalInventoriesRequest 可能只会移除 LocalInventory,而不是全部。假设有地点 ID 的本地商品目录 "store1"price_info,上次记录的更新时间设置为 T1,并且 有一个名为“"attr1"”且最后一次记录的自定义属性的现有自定义属性 更新时间为 T2。如果 RemoveLocalInventoriesRequest.place_ids 包含 "store1",并且 remove_time 已设为 T3(其中 T1 < T3 < T2),则 store_1price_info 将被移除,而其属性 attr1 将保持不变。

预加载商品目录信息

每种本地商品目录更新方法都允许调用方设置 allow_missing。将 allow_missing 设置为 true 时,将按照方法规范处理对不存在的 Product 的本地商品目录更新,就像存在 Product 一样。如果未在此时间范围内通过 CreateProduct 创建相应的 Product,则本地商品目录信息将最多保留两天。