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 Cloud Search dùng để thực hiện các tác vụ sau:

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

  • Duy trì một danh sách các mục cần được lập chỉ mục khi phát hiện thấy trong quá trình truyền tải.

  • Ư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à nhãn được gán cho một mụ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 được dựa trên mã ItemStatus của tài liệu đó. Sau đây là các mã ItemStatus có thể sử dụng theo mức độ ưu tiên (được 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 đây và chưa 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, thì các mục đã ở trong hàng đợi trong khoảng thời gian dài nhất sẽ có mức độ ưu tiên cao 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 một mụ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 mụ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 Thao tác 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 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ì 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 này tồn tại và các giá trị băm khớp với nhau, trạng thái sẽ 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 của mục, hãy tham khảo mã mẫu Truyền tải 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 quá trình truyền tải nội dung và/hoặc thay đổi phát hiện 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 theo mã trạng thái rồi sau đó theo thời gian vào 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 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 đó 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ề việc 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 đầy đủ sử dụng quy trình hai hàng đợi để lập chỉ mục các mục và phát hiện lượt xoá. Hình 2 cho thấy các bước xoá một mục bằng cách sử 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 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ề việc lập chỉ mục trong Google Cloud Search
Hình 2. Xoá 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" dưới dạng NEW_ITEM vì mục này không có 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 để hàng đợi thăm dò ý kiến 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 theo mã trạng thái rồi sau đó theo thời gian vào 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 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 đẩy vào hàng đợi B, vì vậy không có mục nào có thể bị xoá.

  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 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ì 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 và nhãn hàng đợi sẽ được thay đổi thành "B".
    • Nếu mục này tồn tại và giá trị băm khớp, trạng thái sẽ được giữ lại là ACCEPTED và nhãn hàng đợi sẽ được thay đổi thành "B".
    • Nếu mục đó tồn tại và hàm băm khác nhau, trạng thái sẽ trở thành MODIFIED và nhãn hàng đợi sẽ được 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 theo mã trạng thái rồi sau đó theo thời gian vào 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 vào hàng đợi A để xoá tất cả các mục đã lập chỉ mục trước đó trong CCloud Search nhưng vẫn còn nhãn "A" của hàng đợi.

  11. Trong 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 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 các mục vào và kéo các mục từ đó vào 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ể để 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 2 phương thức sau để đẩy các mục vào 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ể 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. Phương thức này có thể được gọi bằng một giá trị type cụ thể. Giá trị này 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ục mới có mã NEW_ITEM ItemStatus.

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

Khi một mục được thăm dò ý kiến, mục đó sẽ được dành riêng, nghĩa là không thể trả về mục này bằng một lệnh gọi khác đến Items.poll. Việc sử dụng Items.push với type như NOT_MODIFIED, REPOSITORY_ERROR hoặc REQUEUE, 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 các giá trị băm nội dung và/hoặc siêu dữ liệu bằng 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 trong 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ề đến Items.poll cho đến khi đáp ứng một trong các trường hợp sau:

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