在 Azure AI 搜尋服務中建立索引子

使用索引子,在 Azure AI 搜尋服務中自動匯入資料並編製索引。 索引子是搜尋服務上的具名物件,其會連線到外部 Azure 資料來源、讀取資料,並將其傳遞至搜尋引擎進行索引編製。 如果您使用支援的資料來源,使用索引子可大幅減少您需要撰寫的程式碼數量和複雜度。

索引子支援兩個工作流程:

  • 文字型編製索引,從文字內容擷取字串和中繼資料,供全文檢索搜尋案例使用。

  • 技能型編製索引,使用內建或自定義技能來新增整合式機器學習服務,以分析影像和大型無差異內容,擷取或推斷文字和結構。 技能型編製索引可讓您搜尋無法輕易全文檢索搜尋的內容。 若要深入了解,請參閱 Azure AI 搜尋服務中的 AI 擴充

本文著重於建立索引子的基本步驟。 視資料來源和工作流程而定,可能需要更多設定。

必要條件

  • 支援的資料來源,其中包含您想要內嵌的內容。

  • 索引子資料來源,其會設定外部資料的連線。

  • 搜尋索引,其可接受傳入資料。

  • 低於在服務層級的最高限制。 免費層允許每個類型三個物件,以及 1-3 分鐘的索引子處理,或如果有技能集,則為 3-10 分鐘。

索引子模式

當您建立索引子時,定義會是下列兩種模式之一:文字型編製索引或使用技能的 AI 擴充。 模式相同,但技能型編製索引具有更多的定義。

文字型編製索引的索引子範例

全文檢索搜尋的文字型編製索引是索引子的主要使用案例,而對於此工作流程,索引子看起來像是下列範例。

{
  "name": (required) String that uniquely identifies the indexer,
  "description": (optional),
  "dataSourceName": (required) String indicating which existing data source to use,
  "targetIndexName": (required) String indicating which existing index to use,
  "parameters": {
    "batchSize": null,
    "maxFailedItems": 0,
    "maxFailedItemsPerBatch": 0,
    "base64EncodeKeys": false,
    "configuration": {}
  },
  "fieldMappings": (optional) unless field discrepancies need resolution,
  "disabled": null,
  "schedule": null,
  "encryptionKey": null
}

索引子具有下列需求:

  • 唯一識別索引子集合中索引子的 "name" 屬性。
  • 指向資料來源物件的 "dataSourceName" 屬性。 它會指定外部資料的連線。
  • 指向目的地搜尋索引的 "targetIndexName" 屬性。

其他參數是選用的,並可修改執行階段行為,例如在整個作業失敗之前可接受多少個錯誤。 必要參數會在所有索引子中加以指定,並記載於 REST API 參考中。

Blob、SQL 和 Azure Cosmos DB 的資料來源特定索引子會為來源特定行為提供額外的 "configuration" 參數。 例如,如果來源是 Blob 儲存體,您可以設定篩選副檔名的參數:"parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }。 如果來源是 Azure SQL,您可以設定查詢逾時參數。

如果資料來源中的欄位與搜尋索引中的欄位之間名稱或類型不一致,則欄位對應用來明確地對應來源至目的地欄位。

根據預設,當您在搜尋服務上建立索引子時,索引子可立即執行。 如果您不想要索引子執行,請在建立索引子時,將 "disabled" 設為 true。

您也可以指定排程或設定加密金鑰,以補充索引子定義加密。

技能型編製索引的索引子範例

索引子也可推動 AI 擴充。 上述所有屬性和參數都適用,但下列額外屬性專屬於 AI 擴充:"skillSetName""cache""outputFieldMappings"

{
  "name": (required) String that uniquely identifies the indexer,
  "dataSourceName": (required) String, provides raw content that will be enriched,
  "targetIndexName": (required) String, name of an existing index,
  "skillsetName" : (required for AI enrichment) String, name of an existing skillset,
  "cache":  {
    "storageConnectionString" : (required if you enable the cache) Connection string to a blob container,
    "enableReprocessing": true
    },
  "parameters": { },
  "fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
  "outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}

AI 擴充有自己的主題領域,不在本文的範圍內。 如需詳細資訊,請從下列主題開始:AI 擴充Azure AI 搜尋服務中的技能集建立技能集對應擴充輸出欄位,以及啟用 AI 擴充的快取

準備外部資料

索引子會使用資料集。 當您執行索引子時,它會連線到您的資料來源、從容器或資料夾中擷取資料,並選擇性地將它序列化為 JSON 並傳遞至搜尋引擎進行索引編制。 本節說明文字型編製索引的傳入資料需求。

來源資料 工作
JSON 文件 請確定傳入資料的結構或形狀對應於搜尋索引的結構描述。 大部分的搜尋索引都相當平直,其中欄位集合是由相同層級的欄位所組成。 不過,可以透過複雜的欄位和集合來建立階層式或巢狀結構。
關聯式 以壓平合併的資料列集提供此資料來源,其中每個資料列都會變成索引中的完整或部分搜尋文件。

若要將關聯式資料壓平合併成資料列集,您應建立 SQL 檢視,或建置查詢以便在相同資料列中傳回父代和子記錄。 例如,內建旅館範例資料集是一個 SQL 資料庫,其中含有 50 筆記錄 (每一間旅館一筆) 並連結至相關資料表中的房間記錄。 將整體資料壓平合併成資料列集的查詢,會將所有房間資訊內嵌在每個旅館記錄的 JSON 檔中。 內嵌房間資訊是由使用 FOR JSON AUTO 子句的查詢所產生。

您可以在定義傳回內嵌 JSON 的查詢中深入了解這項技術。 這只是一個範例;您可以尋找其他會產生相同結果的方法。
檔案 索引子通常會為每個檔案建立一個搜尋文件,其中搜尋文件是由內容和中繼資料的欄位所組成。 根據檔案類型,索引子有時會將一個檔案剖析成多個搜尋文件。 例如,在 CSV 檔案中,每個資料列都可以成為獨立搜尋文件。

請記住,您只需要提取可搜尋和可篩選的資料:

  • 可搜尋的資料是文字。
  • 可篩選的資料是英數字元。

Azure AI 搜尋服務無法以任何格式搜尋二進位資料,雖然其可以擷取和推斷影像檔案的文字描述 (請參閱 AI 擴充) 來建立可搜尋的內容。 同樣地,大量文字可透過自然語言模型拆分後分析,以尋找結構或相關資訊,產生您可以新增至搜尋文件的新內容。

假設索引子無法修正資料問題,可能需要其他形式的資料清理或操作。 如需詳細資訊,您應參閱 Azure 資料庫產品的產品文件。

準備資料來源

索引子需要指定類型、容器和連線的資料來源。

  1. 請確定您使用的是支援的資料來源類型

  2. 建立資料來源定義。 下列清單是一些較常用的資料來源:

  3. 如果資料來源是資料庫,例如 Azure SQL 或 Cosmos DB,請啟用變更追蹤。 Azure 儲存體透過每個 Blob、檔案和資料表上的 LastModified 屬性具有內建的變更追蹤。 各種資料來源的上述連結說明索引子支援哪些變更追蹤方法。

準備索引

索引子也需要搜尋索引。 回想一下,索引子會將資料傳遞至搜尋引擎以編制索引。 就像索引子具有決定執行行為的屬性一樣,索引結構描述的屬性會影響字串編制索引的方式 (只會分析字串並將其權杖化)。

  1. 建立搜尋索引開始。

  2. 設定欄位集合和欄位屬性。

    欄位是外部內容的唯一接收器。 依據欄位在結構描述中建立屬性的方式,系統會分析、權杖化每個欄位的值,或儲存為篩選、模糊搜尋和預先輸入查詢的逐字字串。

    當名稱和類型相等時,索引子會自動將來源欄位對應至目標索引欄位。 如果無法隱含地對應欄位,請記住您可以定義明確的欄位對應,以告知索引子如何路由傳送內容。

  3. 檢閱每個欄位的分析器指派。 分析器可以轉換字串。 因此,已編制索引的字串可能會與您傳入的字串不同。 您可以使用分析文字 (REST) 來評估分析器的效果。 如需分析器的詳細資訊,請參閱文字處理的分析器

在編制索引期間,索引子只會檢查欄位名稱和類型。 沒有任何驗證步驟可確保索引中對應搜尋欄位所含的傳入內容正確無誤。

建立索引子

當準備好在遠端搜尋服務上建立索引子時,您需要一個搜尋用戶端。 搜尋用戶端可以是 Azure 入口網站、REST 用戶端或具現化索引器用戶端的程序代碼。 我們建議使用 Azure 入口網站或 REST API 來進行早期開發和概念證明測試。

  1. 登入 Azure 入口網站

  2. 在搜尋服務的 [概觀] 頁面上,從兩個選項中選擇:

    • 匯入資料精靈。 精靈是唯一的,因為它會建立所有必要元素。 其他方法需要預先定義的資料來源和索引。

    • 新的索引子,用於指定索引子定義的視覺化編輯器。

    下列螢幕擷取畫面顯示您可以在入口網站中找到這些功能的位置。

    hotels indexer

執行索引子

根據預設,當您在搜尋服務上建立索引子時,索引子可立即執行。 您可以將索引子定義中的 "disabled" 設定為 true,以覆寫此行為。 索引子執行是您是否能發現連線、欄位對應或技能集建構出現問題的關鍵。

有數種方法可以執行索引子:

  • 在索引子建立或更新時執行 (預設)。

  • 當定義沒有任何變更,或重設之前進行完整索引編制時,請視需要執行。 如需詳細資訊,請參閱執行或重設索引子

  • 排程索引子處理以定期叫用執行。

當您需要漸進式索引編制時,通常會實作排程執行,以便您挑選最新的變更。 因此,排程須視變更偵測而定。

索引器是少數對其他 Azure 資源進行過度輸出呼叫的子系統之一。 就 Azure 角色而言,索引器沒有個別的身分識別:使用 搜尋服務的系統或使用者指派的受控識別 ,從搜尋引擎連線到另一個 Azure 資源。 如果索引器連線到虛擬網路上的 Azure 資源,您應該 建立該連線的共用私人連結 。 如需安全連線的詳細資訊,請參閱 Azure AI 搜尋中的安全性。

檢查結果

監視索引子狀態以檢查狀態。 成功執行仍可包含警告和通知。 請務必檢查成功和失敗狀態通知,以取得作業的詳細資料。

如需內容驗證,請在填入的索引上執行查詢,以傳回整個文件或選取的欄位。

變更偵測和內部狀態

如果您的資料來源支援變更偵測,索引子可以偵測資料中的基礎變更,並只處理每次索引子執行中的新增或更新的文件,讓未變更的內容照原樣保留。 如果索引子執行歷程記錄指出執行成功並已處理 0/0 個文件,表示索引子在基礎資料來源中找不到任何新增或已變更的資料列或 Blob。

變更偵測邏輯內建於資料平台。 索引子對變更偵測的支援會因資料來源而有所不同:

索引子會從資料來源透過內部「高浮水印」追蹤所處理的最後一份文件。 此標記永遠不會在 API 中公開,但在內部,索引子會追蹤其停止的位置。 當編制索引繼續時,透過排程執行或隨需叫用,索引子可參考高浮水印,以便挑選離開的位置。

如果您需要清除高浮水印以全部重新編制索引,您可以使用重設索引子。 如需更多重新編制索引選擇,請使用重設技能重設文件。 透過重設 API,您可以清除內部狀態,並在啟用漸進式擴充時清除快取。 如要進一步了解每個重設選項的背景和比較,請參閱執行或重設索引子、技能和文件

下一步