实体版本控制

无论是通过 Feed 还是实时更新发送给 Google 的每个实体都附带一个版本。此版本采用时间戳的形式。在 Feed 中,您可以使用 dateModified 属性为每个实体提供时间戳。如果 Feed 实体中未包含该属性,则版本会设为 Feed 提取的开始时间。在实时更新 batchPushbatchDelete 中,分别使用 generation_timestampdelete_time 字段来设置版本。如果未包含该字段,则版本会设置为收到请求的时间。请参阅关系型广告资源架构中的时间值的预期格式。

Google 仅处理版本不低于上次接受的版本的实体(例如餐厅、菜单或服务)。否则,系统不会提取该实体,并记录 Stale Entity 错误。使用新版本更新实体时,上次修改时间戳会更新为更新时刻的当前时间。

示例

假设 Feed 生成于 6 月 16 日 01:10(世界协调时间),其中包含以下示例实体。

{
  "@type": "Restaurant",
  "@id": "restaurant12345",
  "dateModified": "2022-06-16T01:10:00.000Z",
  ...
}

Google 尚未提取该 Feed。当天稍晚的 2022-06-16T01:22:00.000Z,Google 收到包含以下实体的实时更新 batchPush 请求。

{
  "records": [
    {
      "data_record": "{\"@type\": \"Restaurant\",\"@id\": \"restaurant12345\" ...",
      "generation_timestamp": "2022-06-16T01:20:00.000Z"
    }
  ]
}

餐厅实体 ID restaurant12345 的版本现在为 2022-06-16T01:20:00.000Z,并且该实体的上次修改时间戳设为 2022-06-16T01:22:00.000Z。总而言之,上次修改时间是实体在 Google 产品目录中更新的时间,版本是实时更新请求中的 generation_timestamp 值或 Feed 中的 dateModified 值。

然后,从 6 月 16 日凌晨 2:00(世界协调时间)开始提取 Feed。在这种情况下,Feed 中收到的版本为 2022-06-16T01:10:00.000Z 的实体会被视为过时,系统不会提取该实体。因此,Google 会继续通过实时更新请求提供版本为 2022-06-16T01:20:00.000Z 的实体。

最佳做法:

  • 在 Feed 中为每个实体实现时间戳。
  • 实时更新更改应用于您的下一个 Feed,并将 Feed 实体中的 dateModified 时间戳设置为您创建 Feed 时的当前时间。