Connector SDK 和 Google Cloud Search API 可建立 Cloud Search 索引佇列,用於執行下列工作:
維護每個文件的狀態 (狀態、雜湊值等),可用於讓索引與存放區保持同步。
維護要在遍歷程序中探索並建立索引的項目清單。
根據項目狀態,決定佇列中項目的優先順序。
維護其他狀態資訊,例如檢查點、變更權杖等,以利有效整合。
佇列是指派給已建立索引項目的標籤,例如預設佇列的「default」,或是佇列 B 的「B」。
狀態和優先順序
佇列中的文件優先順序取決於其 ItemStatus
程式碼。以下是可能的ItemStatus
代碼,依優先順序排列 (從最先處理到最後處理):
ERROR
- 項目在建立索引期間發生非同步錯誤,需要重新建立索引。MODIFIED
- 之前已編入索引,但自上次編入索引後,已在存放區中修改的項目。NEW_ITEM
- 未編入索引的項目。ACCEPTED
- 先前已建立索引的文件,且自上次建立索引後,存放區中的文件未變更。
如果佇列中有兩項的狀態相同,系統會優先處理在佇列中等待時間最長的項目。
使用索引佇列為新項目或變更項目建立索引的總覽
圖 1 顯示使用索引佇列為新項目或變更項目建立索引的步驟。這些步驟會顯示 REST API 呼叫。如需對等的 SDK 呼叫,請參閱佇列作業 (Connector SDK)。

內容連線器會使用
items.push
將項目 (中繼資料和雜湊) 推送至索引佇列,以建立項目的狀態 (MODIFIED
、NEW_ITEM
、DELETED
)。具體來說:- 推送時,連接器會明確包含推送
type
或contentHash
。 - 如果連接器未包含
type
,Cloud Search 會自動使用contentHash
判斷項目的狀態。 - 如果項目不明,項目狀態會設為
NEW_ITEM
。 - 如果項目存在且雜湊值相符,狀態會維持
ACCEPTED
。 - 如果項目存在但雜湊值不同,狀態會變成
MODIFIED
。
如要進一步瞭解項目狀態的建立方式,請參閱Cloud Search 入門教學課程中的遍歷 GitHub 存放區範例程式碼。
通常,推送會與連接器中的內容遍歷和/或變更偵測程序相關聯。
- 推送時,連接器會明確包含推送
內容連接器會使用
items.poll
輪詢佇列,判斷要建立索引的項目。Cloud Search 會告知連接器最需要建立索引的項目,並先依狀態碼排序,再依佇列中的時間排序。連接器會從存放區擷取這些項目,並建構索引 API 要求。
連接器會使用
items.index
為項目建立索引。Cloud Search 成功處理項目後,項目才會進入ACCEPTED
狀態。
如果項目已不存在於存放區,連接器也可以刪除該項目;如果項目未經修改或發生來源存放區錯誤,連接器也可以再次推送項目。如要瞭解如何刪除項目,請參閱下一節。
使用索引佇列刪除項目總覽
完整遍歷策略會使用雙佇列程序為項目建立索引,並偵測刪除作業。圖 2 顯示使用兩個索引佇列刪除項目的步驟。具體來說,圖 2 顯示使用完整遍歷策略執行的第二次遍歷。這些步驟會使用 REST API 呼叫。如需對等的 SDK 呼叫,請參閱「佇列作業 (Connector SDK)」。

在初始遍歷時,內容連線器會使用
items.push
將項目 (中繼資料和雜湊) 推送到索引佇列 (「佇列 A」),因為佇列中沒有這些項目。NEW_ITEM
每個項目都會指派「A」標籤,代表「佇列 A」。系統會將內容編入 Cloud Search 索引。內容連結器會使用
items.poll
輪詢佇列 A,判斷要建立索引的項目。Cloud Search 會告知連接器最需要建立索引的項目,並先依狀態碼排序,再依佇列中的時間排序。連接器會從存放區擷取這些項目,並建構索引 API 要求。
連接器會使用
items.index
為項目建立索引。Cloud Search 成功處理項目後,項目才會進入ACCEPTED
狀態。系統會對「佇列 B」呼叫
deleteQueueItems
方法。但沒有任何項目已推送至佇列 B,因此無法刪除任何項目。在第二次完整遍歷時,內容連接器會使用
items.push
將項目 (中繼資料和雜湊) 推送至佇列 B:- 推送時,連接器會明確包含推送
type
或contentHash
。 - 如果連接器未包含
type
,Cloud Search 會自動使用contentHash
判斷項目的狀態。 - 如果項目不明,項目狀態會設為
NEW_ITEM
,佇列標籤則會變更為「B」。 - 如果項目存在且雜湊值相符,狀態會維持
ACCEPTED
,佇列標籤則會變更為「B」。 - 如果項目存在但雜湊值不同,狀態會變成
MODIFIED
,佇列標籤則會變更為「B」。
- 推送時,連接器會明確包含推送
內容連接器會使用
items.poll
輪詢佇列,判斷要建立索引的項目。Cloud Search 會告知連接器最需要建立索引的項目,並先依狀態碼排序,再依佇列中的時間排序。連接器會從存放區擷取這些項目,並建構索引 API 要求。
連接器會使用
items.index
為項目建立索引。Cloud Search 成功處理項目後,項目才會進入ACCEPTED
狀態。最後,系統會對佇列 A 呼叫
deleteQueueItems
,刪除所有先前編入索引且仍有「A」佇列標籤的 Cloud Search 項目。在後續的完整遍歷中,用於建立索引的佇列和用於刪除的佇列會互換。
佇列作業 (Connector SDK)
Content Connector SDK 提供作業,可將項目推送至佇列,以及從佇列中提取項目。
如要將項目封裝並推送至佇列,請使用 pushItems
建構工具類別。
您不需要執行任何特定動作,即可從佇列中提取項目進行處理。SDK 會改用 Repository 類別的 getDoc
方法,依優先順序從佇列中自動提取項目。
佇列作業 (REST API)
REST API 提供下列兩種方法,可將項目推送至佇列,以及從佇列中提取項目:
- 如要將項目推送到佇列,請使用
Items.push
。 - 如要輪詢佇列中的項目,請使用
Items.poll
。
您也可以使用 Items.index
在建立索引期間將項目推送至佇列。在建立索引期間推送到佇列的項目不需要 type
,系統會自動指派 ACCEPTED
狀態。
Items.push
Items.push
方法會將 ID 加入佇列。呼叫這個方法時,可以指定 type
值,決定推送作業的結果。如需 type
值清單,請參閱 Items.push 方法中的 item.type
欄位。
推送新 ID 會導致新增含有 NEW_ITEM
ItemStatus
程式碼的新項目。
系統一律會儲存選用酬載,並將其視為不透明值,然後從 Items.poll
傳回。
輪詢項目時,該項目會保留,也就是說,無法透過對 Items.poll
的另一次呼叫傳回。使用 Items.push
搭配 type
做為 NOT_MODIFIED
、REPOSITORY_ERROR
或 REQUEUE
時,會取消保留輪詢項目。如要進一步瞭解已保留和未保留的項目,請參閱「Items.poll」一節。
Items.push
(含雜湊)
Google Cloud Search API 支援在 Items.index
要求中指定中繼資料和內容雜湊值。您可以使用推送要求指定中繼資料和/或內容雜湊值,而不必指定 type
。Cloud Search 索引佇列會比較提供的雜湊值與資料來源中項目可用的儲存值。如果兩者不符,該項目會標示為 MODIFIED
。如果索引中沒有對應項目,狀態會顯示 NEW_ITEM
。
Items.poll
Items.poll 方法會從佇列中擷取優先順序最高的項目。要求和傳回的狀態值會指出所要求優先順序佇列的狀態,或是傳回 ID 的狀態。
根據預設,系統可能會根據優先順序,傳回佇列中任何部分的項目。每個傳回的項目都會保留,且在符合下列其中一種情況前,不會由其他對 Items.poll
的呼叫傳回:
- 預留時間逾時。
Items.index
會再次將項目加入佇列。Items.push
呼叫時,type
值為NOT_MODIFIED
、REPOSITORY_ERROR
或REQUEUE
。