实体版本控制

发送给 Google 的每个实体(无论是通过 Feed 还是实时更新)都附有相应的版本。此版本带有时间戳。在 Feed 中,可以使用 dateModified 属性为每个实体提供时间戳。如果 Feed 实体不包含此属性,则版本会设为 Feed 提取的开始时间。在实时更新 batchPushbatchDelete 中,字段 generation_timestampdelete_time 分别用于设置版本。如果不包含该字段,则版本会设置为收到请求的时间。请查看关系型目录架构中时间值的预期格式。

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

示例

假设 Feed 是在世界协调时间 (UTC) 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 值。

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

最佳做法:

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