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 của từng tài liệu (trạng thái, giá trị băm, v.v.) có thể được 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 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 bổ sung về trạng thái để tích hợp một cách hiệu quả, chẳng hạn như điểm kiểm tra, mã thay đổi, v.v.

Hàng đợi là một 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 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 (được xử lý trước đến được 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, hệ thống sẽ ưu tiên các mục đã nằm trong hàng đợi trong khoảng thời gian dài nhất.

Tổng quan về cách 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 phần Thao tác trong hàng đợi (SDK trình kết nối).

Tổng quan về việc lập chỉ mục trong 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 sẽ bao gồm một lệnh đẩy type hoặc contentHash.
    • Nếu trình kết nối không bao gồm type, thì Tìm kiếm trên đám mây 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, trạng thái sẽ được giữ nguyên là ACCEPTED.
    • Nếu mục đó tồn tại và các hàm băm khác nhau, 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ặt hàng, hãy tham khảo mã mẫu Di chuyển qua các 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 được liên kết với các quy 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ò ý kiến hàng đợi nhằm xác định các mục cần lập chỉ mục. Cloud Search sẽ cho trình kết nối biết những mục cần lập chỉ mục nhất, được sắp xếp theo mã trạng thái trước 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 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 Tìm kiếm trên đám mây hoàn tất quá trình xử lý 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ục, hãy xem phần tiếp theo.

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

Chiến lược duyệt 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 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ượt truy cập thứ hai được thực hiện bằng cách sử dụng chiến lược truy cập toàn bộ. Các bước này sử dụng lệnh gọi API REST. Đối với các lệnh gọi SDK tương đương, hãy tham khảo Thao tác hàng đợi (SDK trình kết nối).

Tổng quan về tính năng lập chỉ mục của Google Cloud Search
Hình 2. Xoá mục
  1. Trong lần truy cập 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ì 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 vào 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 sẽ cho trình kết nối biết những mục cần lập chỉ mục nhất, được sắp xếp theo mã trạng thái trước 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 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 Tìm kiếm trên đám mây hoàn tất quá trình xử lý 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 đẩy vào hàng đợi B, vì vậy, bạn không thể xoá mục nào.

  6. Trong lần truy cập đầ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 bao gồm một nút đẩy type hoặc contentHash một cách rõ ràng.
    • Nếu trình kết nối không bao gồm type, thì Tìm kiếm trên đám mây 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 mục sẽ được đặt thành NEW_ITEM và nhãn hàng đợi sẽ được 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ữ nguyên là ACCEPTED và nhãn hàng đợi sẽ được thay đổi thành "B".
    • Nếu mục tồn tại và 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ò ý kiến hàng đợi nhằm xác định các mục cần lập chỉ mục. Cloud Search sẽ cho trình kết nối biết những mục cần lập chỉ mục nhất, được sắp xếp theo mã trạng thái trước 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 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 đó.

  10. Cuối cùng, deleteQueueItems được gọi trên hàng đợi A để xoá tất cả các mục Tìm kiếm CCloud đã được lập chỉ mục trước đó mà 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 trong hàng đợi (SDK Trình kết nối)

SDK Content Connector cung cấp các thao tác để đẩy và kéo các 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 làm gì cụ thể để lấy 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.

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

API REST cung cấp hai phương thức sau để đẩy và lấy 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 sử dụng Items.poll.

Bạn cũng có thể sử 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 cần có 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ã nhận dạng mới sẽ dẫn đến việc thêm một mục mới bằng mã NEW_ITEM ItemStatus.

Tải trọng không bắt buộc luôn được lưu trữ, coi là 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. Việc sử dụng Items.push với typeNOT_MODIFIED, REPOSITORY_ERROR hoặc REQUEUE sẽ huỷ đặt trước các mục nhập đượ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, hãy tham khảo phần Items.poll.

Items.push có hàm băm

Google Cloud Search API hỗ trợ việc chỉ định siêu dữ liệu và các giá trị băm nội dung cho 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 Cloud Search so sánh các giá trị hàm băm đã 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 từ hàng đợi. Các giá trị trạng thái được yêu cầu và được 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 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 trong 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ề cho Items.poll cho đến khi đáp ứng một trong các trường hợp sau:

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