tạo phiên bản v1 trong nguồn cấp dữ liệu hàng loạt

Trong nguồn cấp dữ liệu hàng loạt, phiên bản của một thực thể được xác định thông qua trường dateModified trên phong bì của nguồn cấp dữ liệu:

{
  "@context": "http://schema.googleapis.com",
  "dateModified": "2018-12-28T06:30:00:123-07:00",
  "@type": "DataFeed",
  "dataFeedElement": [
    /* All the items that are part of this feed go here */
  ]
}

Tất cả thực thể được liệt kê trong trường dataFeedElement sẽ có cùng dấu thời gian như liệt kê trong phong bì.

Ví dụ: Bạn có thể sử dụng nguồn cấp dữ liệu sau với hai thực thể:

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T06:30:00:123-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/somerestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/somerestaurant/menu/1"
      ...
    }
  ]
}

Sau khi nhận và xử lý thực thể, cả thực thể nhà hàng và thực thể sẽ có phiên bản riêng là "2018-12-28T06:30:00:123-07:00".

Lập phiên bản với các bản cập nhật gia tăng

Khi gửi một thực thể bằng tính năng cập nhật khoảng không quảng cáo, phiên bản sẽ được đặt thông qua trường update_time (trong trường hợp là lệnh gọi thêm/cập nhật) hoặc trường delete_time (trong trường hợp là lệnh gọi xoá). Vì các trường này là không bắt buộc, nên dấu thời gian mặc định sẽ được đặt thành thời điểm Google nhận được cuộc gọi.

Ví dụ 1: update_time được đặt rõ ràng

Giả sử bạn nhận được lệnh gọi gia tăng sau đây vào 2018-12-28T06:30:10:123-07:00 cho một nhà hàng hoàn toàn mới. Sau đây là yêu cầu POST qua HTTP cho thực thể đó có mã "http://www.provider.com/some"., giả sử nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo phiên bản 1:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Bên dưới, phần nội dung tải trọng JSON chứa trường update_time. Thực thể có mã nhận dạng là "http://www.provider.com/some". kết quả là thực thể này được chuyển đổi phiên bản thành 6:30:00, chứ không phải khi nhận được (10 giây sau, lúc 6:30:10):

{
// This envelope is to be used for incremental.
  "entity": {
    // Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  },
  "update_time":"2018-12-28T06:30:00:123-07:00"
}

Ví dụ 2: update_time được đặt ngầm

Giả sử bạn nhận được lệnh gọi gia tăng sau đây vào 2018-12-28T06:30:10:123-07:00 cho một nhà hàng hoàn toàn mới. Sau đây là yêu cầu POST qua HTTP cho thực thể đó với mã nhận dạng là "http://www.provider.com/some"., giả sử nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo phiên bản 1:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Bên dưới, phần nội dung tải trọng JSON không chứa trường update_time. Do đó, thực thể có mã nhận dạng là "http://www.provider.com/some". Do đó, thực thể này được tạo phiên bản là 6:30:10:

{
// This envelope is to be used for incremental.
  "entity": {
    //Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  }
}

Tạo phiên bản giữa lô và tăng dần

Thực thể gửi đến Google chỉ được xử lý và phân phát nếu thực thể đó có phiên bản mới nhất. Xin lưu ý rằng các thực thể được gửi qua lô thường mất vài ngày để được xử lý, trong khi các thực thể được gửi thông qua API gia tăng sẽ được xử lý ngay lập tức.

Các phương pháp hay nhất

  • Đặt các trường update_timedateModified theo thứ tự tăng dần và theo lô, tương ứng theo thời điểm thực thể được sửa đổi trong hệ thống của bạn.
  • Nếu một nguồn cấp dữ liệu hàng loạt (tệp) liệt kê nhiều thực thể cấp cao nhất (ví dụ: bạn ghép nối nhà hàng với các dịch vụ và trình đơn), hãy cập nhật dấu thời gian khi dữ liệu của một thực thể được cập nhật.
  • Trong các lệnh gọi gia tăng, bạn nên đặt trường update_time một cách rõ ràng.
  • Sau khi thực hiện lệnh gọi tăng dần, dấu thời gian của nguồn cấp dữ liệu tương ứng (dateModified) cũng được cập nhật trước khi Google tìm nạp lại.

Ví dụ:

Google tìm nạp tệp sau đây vào lúc 11 giờ sáng ngày 28 tháng 12 năm 2018 cho một nhà hàng hoàn toàn mới:

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T06:30:00-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/newrestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/newrestaurant/menu/1"
      ...
    }
    {
      "@type": "Service",
      "@id": "http://www.provider.com/newrestaurant/service/1"
      ...
    }
  ]
}

Những thực thể này được xử lý thành công và có phiên bản là "2018-12-28T06:30:00-07:00". Vì các nguồn cấp dữ liệu hàng loạt cần thời gian để xử lý nên các nguồn cấp dữ liệu này thường được phân phát 2 ngày sau đó.

Tuy nhiên, lúc 1 giờ chiều, hệ thống của đối tác cập nhật số điện thoại của nhà hàng, dẫn đến cuộc gọi gia tăng sau đây mà Google nhận được vào lúc 13:05 (5 giây sau đó):

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
// This envelope is to be used for incremental.
  "entity": {
    //Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  },
  "update_time":"2018-12-28T13:00:00-07:00"
}

update_time được cung cấp rõ ràng và lớn hơn (gần đây hơn) so với phiên bản trước (6:30 sáng cùng ngày). Vì vậy, thực thể nhà hàng hiện được phiên bản là "2018-12-28T13:00:00-07:00". Tuy nhiên, các thực thể trình đơn và dịch vụ vẫn có phiên bản là "2018-12-28T06:30:00-07:00".

Có một lệnh gọi gia tăng, vì vậy, nguồn cấp dữ liệu lô sẽ được cập nhật với dấu thời gian mới tương ứng. Ngoài ra, các thay đổi tương ứng sẽ được áp dụng cho các thực thể có liên quan (thực thể nhà hàng đã cập nhật số điện thoại).

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T13:00:00-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/newrestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/newrestaurant/menu/1"
      ...
    }
    {
      "@type": "Service",
      "@id": "http://www.provider.com/newrestaurant/service/1"
      ...
    }
  ]
}

Vào lúc 11 giờ tối ngày hôm sau (2018-12-29), nguồn cấp dữ liệu được tìm nạp lại. Nhà hàng vẫn sử dụng cùng một phiên bản (1 giờ chiều ngày 28 tháng 12), vì vậy thực thể này sẽ bị loại bỏ và phiên bản hiện tại sẽ được giữ lại. Tuy nhiên, các thực thể Trình đơn và Dịch vụ sẽ được cập nhật với phiên bản mới.

Dấu thời gian của sơ đồ trang web

Tiêu đề phản hồi last-modified trong sơ đồ trang web không ảnh hưởng đến phiên bản của thực thể. Chỉ số này ảnh hưởng đến thời điểm Google tìm nạp nguồn cấp dữ liệu.

Các phương pháp hay nhất

  • Chỉ cập nhật tiêu đề phản hồi khi tất cả các tệp đã được cập nhật và sẵn sàng để tìm nạp.
  • Sử dụng rõ ràng update_timedelete_time theo mức độ tăng dần.
  • Đặt update_time, delete_timedateModified thành thời điểm dữ liệu thay đổi.