Hàng đợi lập chỉ mục của Google Cloud Search

Connector SDK và Google Cloud Search API cho phép tạo Hàng đợi lập chỉ mục Cloud Search dùng để thực hiện các tác vụ sau:

  • Duy trì trạng thái cho từng tài liệu (trạng thái, giá trị băm, v.v.) có thể dùng để đồng bộ hoá chỉ mục với kho lưu trữ.

  • Duy trì danh sách các mục cần được lập chỉ mục khi được phát hiện trong quá trình duyệt qua.

  • Ưu tiên các mục trong hàng đợi dựa trên trạng thái của mục.

  • Duy trì thông tin trạng thái bổ sung để tích hợp hiệu quả, chẳng hạn như điểm kiểm tra, mã thông báo thay đổi, v.v.

Hàng đợi là nhãn được chỉ định cho một mục được lập chỉ mục, chẳng hạn như "mặc định" cho hàng đợi mặc định hoặc "B" cho hàng đợi B.

Trạng thái và mức độ ưu tiên

Mức độ ưu tiên của một tài liệu trong hàng đợi dựa trên mã ItemStatus. Sau đây là các mã ItemStatus có thể có theo thứ tự ưu tiên (xử lý từ đầu đến cuối):

  • ERROR – Mục gặp lỗi không đồng bộ trong quá trình lập chỉ mục và cần được lập chỉ mục lại.

  • MODIFIED – Mục đã được lập chỉ mục trước đó và đã được sửa đổi trong kho lưu trữ kể từ lần lập chỉ mục gần đây nhất.

  • NEW_ITEM – Mục chưa được lập chỉ mục.

  • ACCEPTED – Tài liệu đã được lập chỉ mục trước đó và không thay đổi trong kho lưu trữ kể từ lần lập chỉ mục gần đây nhất.

Khi hai mục trong hàng đợi có cùng trạng thái, hệ thống sẽ ưu tiên các mục đã nằm trong hàng đợi lâu nhất.

Tổng quan về việc sử dụng hàng đợi lập chỉ mục để lập chỉ mục một mục mới hoặc đã thay đổi

Hình 1 cho thấy các bước lập chỉ mục một mục mới hoặc đã thay đổi bằng cách sử dụng hàng đợi lập chỉ mục. Các bước này cho thấy các lệnh gọi API REST. Đối với các lệnh gọi SDK tương đương, hãy tham khảo Các thao tác với hàng đợi (Connector SDK).

Tổng quan về hoạt động lập chỉ mục của Google Cloud Search
Hình 1. Các bước lập chỉ mục để thêm hoặc cập nhật một mục
  1. Trình kết nối nội dung sử dụng items.push để đẩy các mục (siêu dữ liệu và hàm băm) vào hàng đợi lập chỉ mục nhằm xác lập trạng thái của mục (MODIFIED, NEW_ITEM, DELETED). Cụ thể:

    • Khi đẩy, trình kết nối sẽ bao gồm rõ ràng một type hoặc contentHash.
    • Nếu trình kết nối không có type, thì Cloud Search sẽ tự động dùng contentHash để xác định trạng thái của mục.
    • Nếu mặt hàng không xác định, trạng thái mặt hàng sẽ được đặt thành NEW_ITEM.
    • Nếu mục tồn tại và giá trị băm khớp nhau, thì trạng thái sẽ được giữ nguyên là ACCEPTED.
    • Nếu mục này tồn tại và hàm băm khác nhau, thì trạng thái sẽ là MODIFIED.

    Để biết thêm thông tin về cách xác định trạng thái của mục, hãy tham khảo mã mẫu Traversing the GitHub repositories (Duyệt qua kho lưu trữ GitHub) trong hướng dẫn bắt đầu sử dụng Cloud Search.

    Thông thường, thao tác đẩy sẽ liên kết với các quy trình duyệt qua nội dung và/hoặc phát hiện thay đổi trong trình kết nối.

  2. Trình kết nối nội dung sử dụng items.poll để thăm dò hàng đợi nhằm xác định các mục cần lập chỉ mục. Cloud Search cho trình kết nối biết những mục nào cần lập chỉ mục nhất, được sắp xếp trước tiên theo mã trạng thái rồi theo thời gian trong hàng đợi.

  3. Trình kết nối truy xuất các mục này từ kho lưu trữ và tạo các yêu cầu API chỉ mục.

  4. Trình kết nối sử dụng items.index để lập chỉ mục các mục. Mục này chỉ chuyển sang trạng thái ACCEPTED sau khi Cloud Search xử lý xong mục đó.

Trình kết nối cũng có thể xoá một mục nếu mục đó không còn tồn tại trong kho lưu trữ hoặc đẩy lại một mục nếu mục đó không được sửa đổi hoặc nếu có lỗi kho lưu trữ nguồn. Để biết thông tin về việc xoá mặt hàng, hãy xem phần tiếp theo.

Tổng quan về việc sử dụng hàng đợi lập chỉ mục để xoá một mục

Chiến lược duyệt qua toàn bộ sử dụng quy trình hai hàng đợi để lập chỉ mục các mục và phát hiện các mục bị xoá. Hình 2 minh hoạ các bước xoá một mục bằng cách dùng 2 hàng đợi lập chỉ mục. Cụ thể, Hình 2 cho thấy lần truyền tải thứ hai được thực hiện bằng chiến lược truyền tải toàn bộ. Các bước này sử dụng lệnh gọi REST API. Đối với các lệnh gọi SDK tương đương, hãy tham khảo Các thao tác với hàng đợi (Connector SDK).

Tổng quan về hoạt động lập chỉ mục của Google Cloud Search
Hình 2. Xoá các mục
  1. Trong lần duyệt qua ban đầu, trình kết nối nội dung sẽ dùng items.push để đẩy các mục (siêu dữ liệu và hàm băm) vào hàng đợi lập chỉ mục, "hàng đợi A" dưới dạng NEW_ITEM vì hàng đợi này không tồn tại. Mỗi mục được chỉ định nhãn "A" cho "hàng đợi A". Nội dung được lập chỉ mục trong Cloud Search.

  2. Trình kết nối nội dung sử dụng items.poll để thăm dò hàng đợi A nhằm xác định các mục cần lập chỉ mục. Cloud Search cho trình kết nối biết những mục nào cần lập chỉ mục nhất, được sắp xếp trước tiên theo mã trạng thái rồi theo thời gian trong hàng đợi.

  3. Trình kết nối truy xuất các mục này từ kho lưu trữ và tạo các yêu cầu API chỉ mục.

  4. Trình kết nối sử dụng items.index để lập chỉ mục các mục. Mục này chỉ chuyển sang trạng thái ACCEPTED sau khi Cloud Search xử lý xong mục đó.

  5. Phương thức deleteQueueItems được gọi trên "hàng đợi B". Tuy nhiên, không có mục nào được chuyển đến hàng đợi B, nên không có mục nào có thể bị xoá.

  6. Trong lần duyệt qua đầy đủ thứ hai, trình kết nối nội dung sẽ sử dụng items.push để đẩy các mục (siêu dữ liệu và hàm băm) vào hàng đợi B:

    • Khi đẩy, trình kết nối sẽ bao gồm rõ ràng một type hoặc contentHash.
    • Nếu trình kết nối không có type, thì Cloud Search sẽ tự động dùng contentHash để xác định trạng thái của mục.
    • Nếu không xác định được mặt hàng, trạng thái mặt hàng sẽ được đặt thành NEW_ITEM và nhãn hàng đợi sẽ thay đổi thành "B".
    • Nếu mặt hàng tồn tại và giá trị băm khớp nhau, trạng thái sẽ được giữ nguyên là ACCEPTED và nhãn hàng đợi sẽ thay đổi thành "B".
    • Nếu mặt hàng tồn tại và hàm băm khác nhau, trạng thái sẽ là MODIFIED và nhãn hàng đợi sẽ thay đổi thành "B".
  7. Trình kết nối nội dung sử dụng items.poll để thăm dò hàng đợi nhằm xác định các mục cần lập chỉ mục. Cloud Search cho trình kết nối biết những mục nào cần lập chỉ mục nhất, được sắp xếp trước tiên theo mã trạng thái rồi theo thời gian trong hàng đợi.

  8. Trình kết nối truy xuất các mục này từ kho lưu trữ và tạo các yêu cầu API chỉ mục.

  9. Trình kết nối sử dụng items.index để lập chỉ mục các mục. Mục này chỉ chuyển sang trạng thái ACCEPTED sau khi Cloud Search xử lý xong mục đó.

  10. Cuối cùng, deleteQueueItems được gọi trên hàng đợi A để xoá tất cả các mục CCloud Search đã được lập chỉ mục trước đó vẫn có nhãn hàng đợi "A".

  11. Với các lần duyệt qua đầy đủ tiếp theo, hàng đợi dùng để lập chỉ mục và hàng đợi dùng để xoá sẽ được hoán đổi.

Thao tác với hàng đợi (Connector SDK)

Content Connector SDK cung cấp các thao tác để đẩy các mục vào và kéo các mục ra khỏi hàng đợi.

Để đóng gói và đẩy một mục vào hàng đợi, hãy dùng lớp trình tạo pushItems.

Bạn không cần làm gì cụ thể để kéo các mục từ hàng đợi để xử lý. Thay vào đó, SDK sẽ tự động kéo các mục từ hàng đợi theo thứ tự ưu tiên bằng phương thức getDoc của lớp Repository.

Các thao tác với hàng đợi (API REST)

REST API cung cấp 2 phương thức sau để đẩy các mục vào và kéo các mục ra khỏi hàng đợi:

  • Để đẩy một mục vào hàng đợi, hãy dùng Items.push.
  • Để thăm dò các mục trong hàng đợi, hãy sử dụng Items.poll.

Bạn cũng có thể dùng Items.index để đẩy các mục vào hàng đợi trong quá trình lập chỉ mục. Các mục được đẩy vào hàng đợi trong quá trình lập chỉ mục không yêu cầu type và tự động được chỉ định trạng thái ACCEPTED.

Items.push

Phương thức Items.push sẽ thêm mã nhận dạng vào hàng đợi. Bạn có thể gọi phương thức này bằng một giá trị type cụ thể để xác định kết quả của thao tác đẩy. Để biết danh sách các giá trị type, hãy tham khảo trường item.type trong phương thức Items.push.

Việc đẩy một mã nhận dạng mới sẽ dẫn đến việc thêm một mục nhập mới bằng mã NEW_ITEM ItemStatus.

Tải trọng không bắt buộc luôn được lưu trữ, được coi là một giá trị không rõ ràng và được trả về từ Items.poll.

Khi một mục được thăm dò, mục đó sẽ được đặt trước, nghĩa là mục đó không thể được trả về bằng một lệnh gọi khác đến Items.poll. Sử dụng Items.push với typeNOT_MODIFIED, REPOSITORY_ERROR hoặc REQUEUE, unreserves các mục nhập được thăm dò. Để biết thêm thông tin về các mục đã đặt trước và chưa đặt trước, hãy tham khảo phần Items.poll.

Items.push có mã băm

Google Cloud Search API hỗ trợ việc chỉ định siêu dữ liệu và giá trị băm nội dung trên các yêu cầu Items.index. Thay vì chỉ định type, bạn có thể chỉ định siêu dữ liệu và/hoặc giá trị băm nội dung bằng một yêu cầu đẩy. Hàng đợi lập chỉ mục của Cloud Search so sánh các giá trị băm được cung cấp với các giá trị được lưu trữ có sẵn cùng với mục trong nguồn dữ liệu. Nếu không khớp, mục đó sẽ được đánh dấu là MODIFIED. Nếu không có mục tương ứng trong chỉ mục, thì trạng thái là NEW_ITEM.

Items.poll

Phương thức Items.poll truy xuất các mục có mức độ ưu tiên cao nhất từ hàng đợi. Giá trị trạng thái được yêu cầu và trả về cho biết(các) trạng thái của(các) hàng đợi ưu tiên được yêu cầu hoặc trạng thái của các mã nhận dạng được trả về.

Theo mặc định, các mục trong bất kỳ phần nào của hàng đợi đều có thể được trả về, dựa trên mức độ ưu tiên. Mỗi mục nhập được trả về đều được dành riêng và không được các lệnh gọi khác đến Items.poll trả về cho đến khi một trong các trường hợp sau xảy ra:

  • Hết thời gian đặt chỗ.
  • Mục nhập được Items.index xếp hàng lại.
  • Items.push được gọi bằng giá trị typeNOT_MODIFIED, REPOSITORY_ERROR hoặc REQUEUE.