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

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

  • Duy trì trạng thái trên mỗi tài liệu (trạng thái, giá trị băm, v.v.) mà bạn 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 phát hiện được trong quá trình truyền tải.

  • Sắp xếp thứ tự ưu tiên cho 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 bổ sung về trạng thái để 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 gán 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 tài liệu trong hàng đợi dựa trên mã ItemStatus của tài liệu đó. Sau đây là các mã ItemStatus có thể có theo thứ tự ưu tiên (xử lý trước đến xử lý sau cùng):

  • 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, các mục đã nằm trong hàng đợi trong khoảng thời gian dài nhất sẽ được ưu tiên hơn.

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 đã đượ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 đã đượ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 lệnh gọi API REST. Để biết các lệnh gọi SDK tương đương, hãy tham khảo Thao tác xếp hàng (SDK Trình kết nối).

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 thiết lập trạng thái của mục (MODIFIED, NEW_ITEM, DELETED). Cụ thể:

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

    Để biết thêm thông tin về cách thiết lập trạng thái mục, hãy tham khảo mã mẫu Truyền tải qua kho lưu trữ GitHub trong hướng dẫn bắt đầu sử dụng Cloud Search.

    Thông thường, quá trình đẩy được liên kết với quá trình truyền tải 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 mục nào cần lập chỉ mục nhất, được sắp xếp trước 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 chỉ chuyển sang trạng thái ACCEPTED sau khi Cloud Search xử lý xong mục thành công.

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 đó chưa được sửa đổi hoặc nếu có lỗi kho lưu trữ nguồn. Để biết thông tin về cách xoá mục, 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 truyền tải 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 thao tác xoá. Hình 2 cho thấy các bước để xoá một mục bằng cách sử dụng hai 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 API REST. Để biết các lệnh gọi SDK tương đương, hãy tham khảo Thao tác xếp hàng (SDK trình kết nối).

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 truyền tải 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" là NEW_ITEM vì mục này không tồn tại trong hàng đợi. Mỗi mục được gán 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ò ý kiến 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 mục nào cần lập chỉ mục nhất, được sắp xếp trước 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 chỉ chuyển sang trạng thái ACCEPTED sau khi Cloud Search xử lý xong mục thành công.

  5. Phương thức deleteQueueItems được gọi trong "hàng B". Tuy nhiên, không có mục nào được đẩy vào hàng đợi B, vì vậy không thể xoá nội dung nào.

  6. Trong lần truyền tải đầy đủ thứ hai, 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 B:

    • Khi đẩy, trình kết nối rõ ràng bao gồm thao tác đẩy type hoặc contentHash.
    • Nếu trình kết nối không bao gồm type, thì Cloud Search sẽ tự động sử dụng contentHash để xác định trạng thái của mục.
    • Nếu mục là không xác định, trạng thái của mục sẽ được đặt thành NEW_ITEM và nhãn của hàng đợi sẽ thay đổi thành "B".
    • Nếu mục tồn tại và giá trị băm khớp, trạng thái sẽ được giữ là ACCEPTED và nhãn hàng đợi sẽ thay đổi thành "B".
    • Nếu một mục tồn tại và có các hàm băm khác nhau, trạng thái sẽ trở thành 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 mục nào cần lập chỉ mục nhất, được sắp xếp trước 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 chỉ chuyển sang trạng thái ACCEPTED sau khi Cloud Search xử lý xong mục thành công.

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

  11. Với các lần truyền tải đầ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 (SDK trình kết nối)

SDK Trình kết nối nội dung cung cấp các thao tác để đẩy mục vào và kéo mục từ hàng đợi.

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

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

Thao tác trong hàng đợi (API REST)

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

  • Để đẩy một mục vào hàng đợi, hãy sử dụng Items.push.
  • Để thăm dò ý kiến các mục trong hàng đợi, hãy 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 gán 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. Phương thức này có thể được gọi bằng một giá trị type cụ thể sẽ 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ục nhập mới có 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ị mờ và được trả về từ Items.poll.

Khi một mục được thăm dò ý kiến, 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 type dưới dạng NOT_MODIFIED, REPOSITORY_ERROR hoặc REQUEUE, huỷ đặt trước các mục nhập cuộc thăm dò ý kiến. Để biết thêm thông tin về các mục nhập đặt trước và chưa đặt trước, vui lòng tham khảo mục Items.poll.

Items.push có hàm băm

API Google Cloud Search 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 giá trị băm siêu dữ liệu và/hoặc nội dung bằng một yêu cầu đẩy. Hàng đợi lập chỉ mục trên Cloud Search so sánh các giá trị băm được cung cấp với các giá trị đã lưu trữ có sẵn với mục trong nguồn dữ liệu. Nếu không khớp, mục nhập đó sẽ được đánh dấu là MODIFIED. Nếu một mục tương ứng không tồn tại trong chỉ mục, thì trạng thái sẽ 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 qua 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 nhập từ bất kỳ phần nào của hàng đợi 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 đặt trước và không được các lệnh gọi khác trả về đến Items.poll cho đến khi một trong các trường hợp sau được đáp ứng:

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