Google Cloud Search 索引佇列

Connector SDK 和 Cloud Search API 支援建立 Cloud Search 索引佇列。這些佇列的用途包括:

  • 維護每個文件的狀態 (狀態、雜湊等),讓索引保持同步。
  • 維護在遍歷期間發現的待索引項目清單。
  • 根據狀態決定項目優先順序。
  • 維護檢查點和變更權杖等狀態資訊。

佇列是指指派給已建立索引項目的標籤 (例如「default」)。

狀態和優先順序

文件的優先順序取決於其ItemStatus程式碼。可能代碼 (依優先順序排列,由高至低):

  • ERROR:項目發生非同步錯誤,需要重新建立索引。
  • MODIFIED:項目先前已建立索引,但存放區中的項目已變更。
  • NEW_ITEM:該項目尚未建立索引。
  • ACCEPTED:項目先前已建立索引,且未變更。

如果項目狀態相同,系統會優先處理在佇列中等待最久的項目。

為新項目或變更項目建立索引

圖 1 顯示使用索引佇列為新項目或變更項目建立索引的步驟。這些步驟反映了 REST API 呼叫;如需 SDK 對應項目,請參閱「佇列作業 (Connector SDK)」。

Cloud Search 索引總覽
圖 1. 索引步驟,新增或更新項目
  1. 內容連接器會使用 items.push 將中繼資料和雜湊值推送到佇列。
    • 如果連接器包含推送 typecontentHash,Cloud Search 會判斷狀態。
    • 狀態不明的項目會顯示 NEW_ITEM 狀態。
    • 如果現有項目具有相符的雜湊值,則會維持 ACCEPTED
    • 雜湊值不同的現有項目會變成 MODIFIED
  2. 連接器會使用 items.poll 判斷要為哪些項目建立索引。Cloud Search 會依優先順序傳回項目。
  3. 連接器會從存放區擷取項目,並建構索引 API 要求。
  4. 連接器會使用 items.index 為項目建立索引。項目成功處理後,就會進入 ACCEPTED 狀態。

刪除項目

完整遍歷策略會使用兩個佇列來為項目建立索引及偵測刪除作業。圖 2 顯示這項策略的第二次遍歷。

Cloud Search 索引總覽
圖 2. 刪除項目
  1. 在初始遍歷時,連接器會將項目推送至「佇列 A」,如 NEW_ITEM 所示。每個項目都會收到「A」標籤。
  2. 連接器會輪詢佇列 A 並為項目建立索引。
  3. 在第二次完整遍歷時,連接器會將項目推送到「佇列 B」。
    • 不明項目會收到「B」標籤和 NEW_ITEM 狀態。
    • 如果現有項目與雜湊值相符,系統會將標籤變更為「B」,並保留在 ACCEPTED
    • 如果現有項目的雜湊值不同,標籤會變更為「B」,並成為 MODIFIED
  4. 連接器會輪詢佇列 B 並為項目建立索引。
  5. 最後,連接器會在佇列 A 上呼叫 deleteQueueItems。這會刪除所有先前建立索引,且仍有「A.」標籤的項目。
  6. 後續的遍歷會交換這兩個佇列的角色。

佇列作業 (Connector SDK)

使用 pushItems 建構工具推送項目。SDK 會使用 Repository 類別的 getDoc 方法,自動從佇列中依優先順序提取項目。

佇列作業 (REST API)

您也可以使用 Items.index 在建立索引期間推送項目。這些項目會自動進入「已完成」ACCEPTED狀態。

Items.push

這個方法會將 ID 新增至佇列。結果由 type 決定。推送新 ID 會新增狀態為 NEW_ITEM 的項目。 輪詢期間會傳回選用酬載。

輪詢項目會保留,無法透過其他輪詢呼叫傳回。使用 Items.push 並將 type 設為 NOT_MODIFIEDREPOSITORY_ERRORREQUEUE,即可取消預訂項目。

使用雜湊的 Items.push

在推送要求中指定中繼資料或內容雜湊。Cloud Search 會將這些值與儲存的值進行比較。如果兩者不相符,項目會變成 MODIFIED。不存在的不相符 ID 會變成 NEW_ITEM

Items.poll

這個方法會擷取高優先順序項目。每個傳回的項目都會保留,直到逾時、重新建立索引或使用 Items.push 取消保留為止。