執行或重設索引子、技能或文件
在 Azure AI 搜尋服務中,有數種方式可以執行索引子:
- 在建立索引子時立即執行,假設不是建立為「已停用」模式。
- 依排程執行以定期叫用執行。
- 視需要執行,且無需「重設」。
本文說明如何隨需執行索引子,並進行重設或不進行重設。 也會描述索引子的執行、持續時間和並行。
索引器如何連線到 Azure 資源
索引器是少數對其他 Azure 資源進行過度輸出呼叫的子系統之一。 就 Azure 角色而言,索引器沒有個別的身分識別:使用搜尋服務的系統或使用者指派的受控識別,從搜尋引擎連線到另一個 Azure 資源。 如果索引器連線到虛擬網路上的 Azure 資源,您應該建立該連線的共用私人連結。 如需安全連線的詳細資訊,請參閱 Azure AI 搜尋服務中的安全性。
索引子的執行
搜尋服務會對每個搜尋單位執行一次索引子作業。 每個搜尋服務都會以一個搜尋單位開始,但每個新的分割區或複本都會增加服務的搜尋單位。 您可以在入口網站的 [概觀] 頁面的 [基本] 區段中確認搜尋單位計數。 如果您需要並行處理,請確定您的搜尋單位包含足夠的複本。 索引子不會在背景執行,因此如果服務面臨壓力,您可能會檢測到比平常更多的查詢節流。
下列螢幕擷取畫面顯示搜尋單位數目,此數目會影響可同時執行的索引子數量。
索引子執行開始後,便無法暫停或停止。 當沒有可載入或重新整理的文件,或達到執行時間上限時,索引子執行就會停止。
假如有足夠的容量,您可以一次執行多個索引子,但每個索引子本身都是單一執行個體。 在索引子已在執行時開始新的執行個體會產生以下錯誤:"Failed to run indexer "<indexer name>" error: "Another indexer invocation is currently in progress; concurrent invocations are not allowed."
索引子作業會在受控執行環境中執行。 目前有兩個環境:
私人執行環境會在搜尋服務專屬的搜尋叢集上執行。 如果您的搜尋服務是 Standard2 或 nigher,您可以在索引器定義中將 參數設定
executionEnvironment
為一律在私人執行環境中執行索引器。多租用戶環境具有由Microsoft管理及保護的內容處理器,不需額外費用。 此環境可用來卸載計算密集型處理,讓特定於服務的資源可用於常式作業。 盡可能在多租用戶環境中執行大部分技能集。 這是預設值。
大量計算處理包括內容處理器上執行的技能集,以及具有大型檔的大量索引器作業或索引器作業。 多租用戶內容處理器上的非技能集處理是由休學和系統資訊所決定,而且不受客戶控制。 S2 服務和更高版本支援透過
executionEnvironment
參數,以獨佔方式將索引器和技能集處理釘選到您的搜尋叢集。注意
IP 防火牆會 封鎖多租用戶環境,因此如果您有防火牆,請建立允許多租用戶處理的規則。
索引子限制會因環境而有所不同:
工作負載 | 最長持續時間 | 最大作業數 | 執行環境 |
---|---|---|---|
私人執行 | 24 小時 | 每個搜尋單位一個索引子作業1。 | 索引編製作業不會在背景中執行。 相反地,搜尋服務會將所有索引編製作業與進行中的查詢和物件管理動作 (例如建立或更新索引) 進行平衡。 在執行索引子時,如果索引編製作業的數量很大,您應該會看到一些查詢延遲的情況。 |
多租用戶 | 2 小時 2 | 不確定 3 | 由於內容處理叢集是多租使用者,因此會新增內容處理器以符合需求。 如果您遇到隨選或排程執行的延遲,可能是因為系統正在新增處理器或等待一個處理器可供使用。 |
1 搜尋單位可以是分割區和複本的彈性組合,但索引子作業不會繫結至其中一項。 換句話說,如果您有 12 個單位,則不論搜尋單位的部署方式為何,都可以在私人執行中同時執行 12 個索引子作業。
2 如果需要超過兩個小時來處理所有數據, 請啟用變更偵測 並 排程索引器 以 5 分鐘間隔執行,以在因逾時而停止時快速繼續編製索引。 如需更多策略,請參閱編製大型資料集的索引。
3 「不確定」表示限制不是以作業數目來計算。 部分工作負載 (例如技能集處理) 可以平行執行,這可能會導致許多作業,即使只涉及一個索引子也一樣。 雖然環境不會增加限制,但搜尋服務的索引子限制仍適用。
執行但不重設
執行索引子作業只會偵測及處理要讓搜尋索引與基礎資料來源的變更進行同步處理所需的項目。 累加式索引編製首先會找到內部高水位線以尋找最後更新的搜尋文件,以作為對資料來源中的新文件和更新文件執行索引子的起點。
變更偵測對於判斷資料來源中的新內容或更新內容很重要。 索引子會使用基礎資料來源的變更偵測功能來判斷資料來源中的新增或更新內容。
Azure 儲存體透過其 LastModified 屬性內建了變更偵測功能。
其他資料來源 (例如 Azure SQL 或 Azure Cosmos DB) 則必須先針對變更偵測進行設定,然後索引子才能讀取新的和更新的資料列。
如果基礎內容未變更,則執行作業不會產生影響。 在此情況下,索引子執行歷程記錄會指出已處理的 0\0
文件。
您必須重設索引子 (如下一節所述),才能完全重新處理。
重設索引子
在初次執行後,索引子會追蹤有哪些搜尋文件已透過內部高水位線來編製索引。 此標記永遠不會公開,但索引子會在內部掌握其上次停止的位置。
如果您需要重建所有或部分的索引,則可透過重設來清除索引子的高水位線。 重設 API 可在物件階層中的遞減層級中使用:
在重設之後,請遵循 Run 命令來重新處理新文件和現有文件。 資料來源中沒有對應項目的孤立搜尋文件無法透過重設/執行來移除。 如果您需要刪除文件,請參閱文件 - 索引。
如何重設和執行索引子
進行重設會清除高水位線。 搜尋索引中的所有文件都會加上完整覆寫旗標,而不會內嵌更新或合併至現有內容。 如果索引子有技能集和擴充快取,則重設索引也會隱含地重設技能集。
當您使用 Run 命令遵循重設時,就會發生實際的工作:
- 找到基礎來源的所有新文件都會新增至搜尋索引。
- 所有存在於資料來源和搜尋索引的文件都會在搜尋索引中覆寫。
- 將會重建透過技能集所建立的任何擴充內容。 如果已啟用擴充快取,則會重新整理擴充快取。
如先前所述,重設是被動作業:您必須遵循 Run 要求才能重建索引。
重設/執行作業適用於搜尋索引或知識存放區、適用於特定文件或投影,以及適用於快取擴充 (如果重設會明確或隱含地包含技能的話)。
重設也適用於建立和更新作業。 其不會觸發搜尋索引中孤立文件的刪除或清除。 如需刪除文件的詳細資訊,請參閱文件 - 索引。
重設索引子之後,就無法復原此動作。
登入 Azure 入口網站並開啟搜尋服務頁面。
在 [概觀] 頁面上,選取 [索引子] 索引標籤。
選取索引子。
選取 [重設] 命令,然後選取 [是] 以確認此動作。
重新整理頁面以顯示狀態。 您可以選取項目來檢視其詳細資料。
選取 [執行] 以啟動索引子處理,或等候所排程的下一次執行。
如何重設技能 (預覽)
對於具有技能集的索引子,您可以重設個別技能,以便只強制處理該技能以及相依於其輸出的任何下游技能。 如果您啟用擴充快取,擴充快取也會重新整理。
重設技能目前僅限 REST,可透過 2020-06-30-preview 或更新版本取得。 我們建議最新的預覽版 API。
POST /skillsets/[skillset name]/resetskills?api-version=2024-05-01-preview
{
"skillNames" : [
"#1",
"#5",
"#6"
]
}
您可以如上述範例所示來指定個別技能,但如果其中有任何技能需要來自未列出技能的輸出 (#2 到 #4),則除非快取可以提供必要資訊,否則未列出的技能將會執行。 為了讓這一點成立,技能 #2 到技能 #4 的快取擴充不得相依於技能 #1 (已列入重設清單)。
如果未指定任何技能,則會執行整個技能集,而且如果啟用快取,快取也會重新整理。
請記得遵循 Run 索引子以叫用實際的處理。
如何重設文件 (預覽)
索引器 - 重設文件接受文件索引鍵清單,以讓您能夠重新整理特定文件。 如果指定重設參數,則重設參數會變成決定受處理項目的唯一因素 (不論基礎資料中的其他變更為何)。 例如,如果在上次執行索引子之後新增或更新了 20 個 Blob,但您只重設一份文件,則系統只會處理該文件。
該搜尋文件中的所有欄位都會按文件以資料來源的值加以重新整理。 您無法挑選要重新整理的欄位。
如果文件透過技能集加以擴充並已快取資料,則只會針對指定文件叫用技能集,並針對已重新處理的文件更新快取。
當您第一次測試此 API 時,下列 API 可協助您驗證及測試行為。 您可以使用預覽 API 版本 2020-06-30-preview 和更新版本。 我們建議最新的預覽版 API。
使用預覽 API 版本呼叫索引器 - 取得狀態,以檢查重設狀態和執行狀態。 您可以在狀態回應結束時找到重設要求的相關資訊。
使用預覽 API 版本呼叫索引器 - 重設文件,以指定要處理的文件。
POST https://[service name].search.windows.net/indexers/[indexer name]/resetdocs?api-version=2024-05-01-preview { "documentKeys" : [ "1001", "4452" ] }
要求中提供的文件索引鍵是來自搜尋索引的值,這與資料來源中的對應欄位不同。 如果您不確定索引鍵值,請傳送查詢以傳回值。 您可以使用
select
只傳回文件索引鍵欄位。對於剖析成多個搜尋文件的 Blob (其中 parsingMode 設定為 jsonLines 或 jsonArrays 或 delimitedText),索引子會產生文件索引鍵,但這些對您來說可能是未知的。 在此情況下,文件索引鍵的查詢會傳回正確的值。
呼叫執行索引子 (任何 API 版本) 來處理您指定的文件。 只有這些特定文件會編製索引。
第二次呼叫執行索引子,以從上一個高水位線開始處理。
呼叫搜尋文件來檢查更新的值,如果您不確定值,也可傳回文件索引鍵。 如果您想要限制回應中出現的欄位,請使用
"select": "<field names>"
。
覆寫文件索引鍵清單
使用不同索引鍵多次呼叫重設文件 API,會將新的索引鍵附加至文件索引鍵重設清單。 呼叫 overwrite
參數設定為 true 的 API 將會以新的清單覆寫目前的清單:
POST https://[service name].search.windows.net/indexers/[indexer name]/resetdocs?api-version=2020-06-30-Preview
{
"documentKeys" : [
"200",
"630"
],
"overwrite": true
}
檢查重設狀態「currentState」
若要檢查重設狀態,並查看哪些文件索引鍵已排入處理佇列,請遵循下列步驟。
使用預覽 API 呼叫取得索引器狀態。
預覽 API 會傳回
currentState
區段 (可在回應結尾找到)。"currentState": { "mode": "indexingResetDocs", "allDocsInitialTrackingState": "{\"LastFullEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"LastAttemptedEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"NameHighWaterMark\":null}", "allDocsFinalTrackingState": "{\"LastFullEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"LastAttemptedEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"NameHighWaterMark\":null}", "resetDocsInitialTrackingState": null, "resetDocsFinalTrackingState": null, "resetDocumentKeys": [ "200", "630" ] }
檢查「mode」:
針對重設技能,「mode」應該設定為
indexingAllDocs
(因為所有文件可能都會受到影響,就透過 AI 擴充所填入的欄位而言)。針對重設文件,「mode」應該設定為
indexingResetDocs
。 索引子會保持此狀態,直到重設文件呼叫中所提供的文件索引鍵均完成處理為止,在此期間,不會在作業進行時再執行其他任何索引子作業。 在文件索引鍵清單中尋找所有文件時,需要萃取每個文件以找到並比對索引鍵,如果資料集很大,這可能需要一些時間。 如果 Blob 容器包含數百個 Blob,而您想要重設的文件位於末端,則索引子在先檢查所有其他 Blob 之前,都不會找到相符的 Blob。文件重新處理完之後,請再次執行「取得索引子狀態」。 索引子會返回
indexingAllDocs
模式,並且會在下一次執行時處理任何新的或更新的文件。
下一步
重設 API 可用來通知下一次索引子執行的範圍。 若為實際處理,您必須叫用隨需索引子執行,或允許排程的作業完成工作。 執行完成之後,索引子會回復為正常處理 (無論是排程處理還是隨需處理)。
重設並重新執行索引子作業之後,您可以從搜尋服務監視狀態,或透過資源記錄取得詳細資訊。