共用方式為


執行或重設索引子、技能或文件

在 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."

索引子作業會在受控執行環境中執行。 目前有兩個環境。 您無法控制或設定所使用的環境。 Azure AI 搜尋服務會根據作業組合以及服務將索引子作業移至內容處理器的能力來決定環境 (部分安全性功能會封鎖多租用戶環境)。

索引子執行環境包括:

  • 在搜尋節點上執行的私人執行環境,專屬於您的搜尋服務。

  • 含內容處理器的多租用戶環境,由 Microsoft 管理及保護,不需額外費用。 此環境可用來卸載計算密集型處理,讓特定於服務的資源可用於常式作業。 在可能的情況下,大部分的索引子作業會在多租用戶環境中。

索引子限制會因環境而有所不同:

工作負載 最長持續時間 最大作業數 執行環境
私人執行 24 小時 每個搜尋單位一個索引子作業1 索引編製作業不會在背景中執行。 相反地,搜尋服務會將所有索引編製作業與進行中的查詢和物件管理動作 (例如建立或更新索引) 進行平衡。 在執行索引子時,如果索引編製作業的數量很大,您應該會看到一些查詢延遲的情況。
多租用戶 2 小時 2 不確定 3 因為內容處理叢集是多租用戶,所以會增加節點來符合需求。 如果您在隨需或排程的執行遇到延遲,原因可能是系統正在增加節點或正在等候有節點可供使用。

1 搜尋單位可以是分割區和複本的彈性組合,但索引子作業不會繫結至其中一項。 換句話說,如果您有 12 個單位,則不論搜尋單位的部署方式為何,都可以在私人執行中同時執行 12 個索引子作業。

2 如果處理所有資料需要超過兩個小時,請啟用變更偵測排程索引子以兩小時為間隔執行。 如需更多策略,請參閱編製大型資料集的索引

3 「不確定」表示限制不是以作業數目來計算。 部分工作負載 (例如技能集處理) 可以平行執行,這可能會導致許多作業,即使只涉及一個索引子也一樣。 雖然環境不會增加限制,但搜尋服務的索引子限制仍適用。

執行但不重設

執行索引子作業只會偵測及處理要讓搜尋索引與基礎資料來源的變更進行同步處理所需的項目。 累加式索引編製首先會找到內部高水位線以尋找最後更新的搜尋文件,以作為對資料來源中的新文件和更新文件執行索引子的起點。

變更偵測對於判斷資料來源中的新內容或更新內容很重要。 索引子會使用基礎資料來源的變更偵測功能來判斷資料來源中的新增或更新內容。

  • Azure 儲存體透過其 LastModified 屬性內建了變更偵測功能。

  • 其他資料來源 (例如 Azure SQL 或 Azure Cosmos DB) 則必須先針對變更偵測進行設定,然後索引子才能讀取新的和更新的資料列。

如果基礎內容未變更,則執行作業不會產生影響。 在此情況下,索引子執行歷程記錄會指出已處理的 0\0 文件。

您必須重設索引子 (如下一節所述),才能完全重新處理。

重設索引子

在初次執行後,索引子會追蹤有哪些搜尋文件已透過內部高水位線來編製索引。 此標記永遠不會公開,但索引子會在內部掌握其上次停止的位置。

如果您需要重建所有或部分的索引,則可透過重設來清除索引子的高水位線。 重設 API 可在物件階層中的遞減層級中使用:

在重設之後,請遵循 Run 命令來重新處理新文件和現有文件。 資料來源中沒有對應項目的孤立搜尋文件無法透過重設/執行來移除。 如果您需要刪除文件,請參閱文件 - 索引

如何重設和執行索引子

進行重設會清除高水位線。 搜尋索引中的所有文件都會加上完整覆寫旗標,而不會內嵌更新或合併至現有內容。 如果索引子有技能集和擴充快取,則重設索引也會隱含地重設技能集。

當您使用 Run 命令遵循重設時,就會發生實際的工作:

  • 找到基礎來源的所有新文件都會新增至搜尋索引。
  • 所有存在於資料來源和搜尋索引的文件都會在搜尋索引中覆寫。
  • 將會重建透過技能集所建立的任何擴充內容。 如果已啟用擴充快取,則會重新整理擴充快取。

如先前所述,重設是被動作業:您必須遵循 Run 要求才能重建索引。

重設/執行作業適用於搜尋索引或知識存放區、適用於特定文件或投影,以及適用於快取擴充 (如果重設會明確或隱含地包含技能的話)。

重設也適用於建立和更新作業。 其不會觸發搜尋索引中孤立文件的刪除或清除。 如需刪除文件的詳細資訊,請參閱文件 - 索引

重設索引子之後,就無法復原此動作。

  1. 登入 Azure 入口網站並開啟搜尋服務頁面。

  2. 在 [概觀] 頁面上,選取 [索引子] 索引標籤。

  3. 選取索引子。

  4. 選取 [重設] 命令,然後選取 [是] 以確認此動作。

  5. 重新整理頁面以顯示狀態。 您可以選取項目來檢視其詳細資料。

  6. 選取 [執行] 以啟動索引子處理,或等候所排程的下一次執行。

    螢幕擷取畫面:索引子執行入口網站頁面,會醒目提示 [重設] 命令。

如何重設技能 (預覽)

對於具有技能集的索引子,您可以重設個別技能,以便只強制處理該技能以及相依於其輸出的任何下游技能。 如果您啟用擴充快取,擴充快取也會重新整理。

重設技能目前僅限 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。

  1. 使用預覽 API 版本呼叫索引器 - 取得狀態,以檢查重設狀態和執行狀態。 您可以在狀態回應結束時找到重設要求的相關資訊。

  2. 使用預覽 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 或 jsonArraysdelimitedText),索引子會產生文件索引鍵,但這些對您來說可能是未知的。 在此情況下,文件索引鍵的查詢會傳回正確的值。

  3. 呼叫執行索引子 (任何 API 版本) 來處理您指定的文件。 只有這些特定文件會編製索引。

  4. 第二次呼叫執行索引子,以從上一個高水位線開始處理。

  5. 呼叫搜尋文件來檢查更新的值,如果您不確定值,也可傳回文件索引鍵。 如果您想要限制回應中出現的欄位,請使用 "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」

若要檢查重設狀態,並查看哪些文件索引鍵已排入處理佇列,請遵循下列步驟。

  1. 使用預覽 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"
        ]
    }
    
  2. 檢查「mode」:

    針對重設技能,「mode」應該設定為 indexingAllDocs (因為所有文件可能都會受到影響,就透過 AI 擴充所填入的欄位而言)。

    針對重設文件,「mode」應該設定為 indexingResetDocs。 索引子會保持此狀態,直到重設文件呼叫中所提供的文件索引鍵均完成處理為止,在此期間,不會在作業進行時再執行其他任何索引子作業。 在文件索引鍵清單中尋找所有文件時,需要萃取每個文件以找到並比對索引鍵,如果資料集很大,這可能需要一些時間。 如果 Blob 容器包含數百個 Blob,而您想要重設的文件位於末端,則索引子在先檢查所有其他 Blob 之前,都不會找到相符的 Blob。

  3. 文件重新處理完之後,請再次執行「取得索引子狀態」。 索引子會返回 indexingAllDocs 模式,並且會在下一次執行時處理任何新的或更新的文件。

下一步

重設 API 可用來通知下一次索引子執行的範圍。 若為實際處理,您必須叫用隨需索引子執行,或允許排程的作業完成工作。 執行完成之後,索引子會回復為正常處理 (無論是排程處理還是隨需處理)。

重設並重新執行索引子作業之後,您可以從搜尋服務監視狀態,或透過資源記錄取得詳細資訊。