在 Azure AI 搜尋服務中建立索引子
本文著重於建立索引子的基本步驟。 視資料來源和工作流程而定,可能需要更多設定。
您可以使用索引器,在 Azure AI 搜尋服務中自動化數據匯入和編製索引。 索引子是搜尋服務上的具名物件,其會連線到外部 Azure 資料來源、讀取資料,並將其傳遞至搜尋引擎進行索引編製。 如果您使用支援的資料來源,使用索引子可大幅減少您需要撰寫的程式碼數量和複雜度。
索引子支援兩個工作流程:
原始內容索引(純文本或向量):從全文搜索案例的文字內容擷取字串和元數據。 擷取向量搜尋的原始向量內容(例如,Azure SQL 資料庫或 Azure Cosmos DB 集合中的向量)。 在此工作流程中,索引只會發生在您提供的現有內容上。
技能型索引:透過內建或自定義技能擴充索引,以建立或產生新的可搜尋內容。 例如,您可以新增整合式機器學習服務,以分析影像和非結構化文字、擷取或推斷文字和結構。 或者,使用技能來區塊化和向量化來自文字和影像的內容。 技能型索引會建立或產生外部數據源中不存在的新內容。 當您將欄位新增至接受傳入數據的索引架構時,新內容會成為索引的一部分。 若要深入了解,請參閱 Azure AI 搜尋服務中的 AI 擴充。
必要條件
支援的資料來源,其中包含您想要內嵌的內容。
索引子資料來源,其會設定外部資料的連線。
搜尋索引,其可接受傳入資料。
低於在服務層級的最高限制。 免費層允許每個類型的三個物件和 1-3 分鐘的索引器處理,如果有技能集,則為 3-10 分鐘。
索引子模式
當您建立索引器時,定義是兩種模式之一:內容型索引編製或技能型索引。 模式相同,但技能型編製索引具有更多的定義。
內容型索引編製的索引器範例
全文檢索或向量搜尋的內容型索引是索引器的主要使用案例。 在此工作流程中,索引器看起來像這個範例。
{
"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 文件 | JSON 檔可以包含文字、數位和向量。 請確定傳入資料的結構或形狀對應於搜尋索引的結構描述。 大部分的搜尋索引都相當平直,其中欄位集合是由相同層級的欄位所組成。 不過,可以透過複雜的欄位和集合來建立階層式或巢狀結構。 |
關聯式 | 提供數據做為扁平化數據列集,其中每個數據列都會成為索引中的完整或部分搜尋檔。 若要將關聯式資料壓平合併成資料列集,您應建立 SQL 檢視,或建置查詢以便在相同資料列中傳回父代和子記錄。 例如,內建旅館範例資料集是一個 SQL 資料庫,其中含有 50 筆記錄 (每一間旅館一筆) 並連結至相關資料表中的房間記錄。 將整體資料壓平合併成資料列集的查詢,會將所有房間資訊內嵌在每個旅館記錄的 JSON 檔中。 內嵌房間資訊是由使用 FOR JSON AUTO 子句的查詢所產生。 您可以在定義傳回內嵌 JSON 的查詢中深入了解這項技術。 這只是一個範例;您可以尋找其他會產生相同結果的方法。 |
檔案 | 索引子通常會為每個檔案建立一個搜尋文件,其中搜尋文件是由內容和中繼資料的欄位所組成。 根據檔案類型,索引子有時會將一個檔案剖析成多個搜尋文件。 例如,在 CSV 檔案中,每個資料列都可以成為獨立搜尋文件。 |
請記住,您只需要提取可搜尋和可篩選的資料:
- 可搜尋的數據是文字或向量
- 可篩選的資料是文字和數位(非向量欄位)
Azure AI 搜尋無法針對任何格式的二進位數據執行全文搜索,不過它可以擷取和推斷影像檔案的文字描述(請參閱 AI 擴充),以建立可搜尋的內容。 同樣地,大量文字可透過自然語言模型拆分後分析,以尋找結構或相關資訊,產生您可以新增至搜尋文件的新內容。 它也可以對內嵌進行向量搜尋,包括二進位格式的量化內嵌。
假設索引子無法修正資料問題,可能需要其他形式的資料清理或操作。 如需詳細資訊,您應參閱 Azure 資料庫產品的產品文件。
準備資料來源
索引子需要指定類型、容器和連線的資料來源。
請確定您使用的是支援的資料來源類型。
建立資料來源定義。 下列數據源是其中一些較常用的來源:
如果資料來源是資料庫,例如 Azure SQL 或 Cosmos DB,請啟用變更追蹤。 Azure 儲存體透過每個 Blob、檔案和資料表上的
LastModified
屬性具有內建的變更追蹤。 各種數據源的連結說明索引器支援哪些變更追蹤方法。
準備索引
索引子也需要搜尋索引。 回想一下,索引子會將資料傳遞至搜尋引擎以編制索引。 就像索引子具有決定執行行為的屬性一樣,索引結構描述的屬性會影響字串編制索引的方式 (只會分析字串並將其權杖化)。
從建立搜尋索引開始。
設定欄位集合和欄位屬性。
欄位是外部內容的唯一接收器。 依據欄位在結構描述中建立屬性的方式,系統會分析、權杖化每個欄位的值,或儲存為篩選、模糊搜尋和預先輸入查詢的逐字字串。
當名稱和類型相等時,索引子會自動將來源欄位對應至目標索引欄位。 如果無法隱含地對應欄位,請記住您可以定義明確的欄位對應,以告知索引子如何路由傳送內容。
檢閱每個欄位的分析器指派。 分析器可以轉換字串。 因此,已編制索引的字串可能會與您傳入的字串不同。 您可以使用分析文字 (REST) 來評估分析器的效果。 如需分析器的詳細資訊,請參閱文字處理的分析器。
在編制索引期間,索引子只會檢查欄位名稱和類型。 沒有任何驗證步驟可確保索引中對應搜尋欄位所含的傳入內容正確無誤。
建立索引子
當準備好在遠端搜尋服務上建立索引子時,您需要一個搜尋用戶端。 搜尋用戶端可以是 Azure 入口網站、REST 用戶端,或具現化索引子用戶端的程式碼。 我們建議使用 Azure 入口網站或 REST API 來進行早期開發和概念證明測試。
登入 Azure 入口網站,然後尋找您的搜尋服務。
在搜尋服務 [概觀] 頁面上,從兩個選項中選擇:
匯入數據 精靈:精靈是唯一的,因為它會建立所有必要的元素。 其他方法需要預先定義的資料來源和索引。
新增索引器:指定索引器定義的可視化編輯器。
執行索引子
根據預設,當您在搜尋服務上建立索引子時,索引子可立即執行。 您可以在索引器定義中將 設定 disabled
為 true 來覆寫此行為。 索引子執行是您是否能發現連線、欄位對應或技能集建構出現問題的關鍵。
有數種方法可以執行索引子:
當您需要漸進式索引編制時,通常會實作排程執行,以便您挑選最新的變更。 因此,排程須視變更偵測而定。
索引器是少數對其他 Azure 資源進行過度輸出呼叫的子系統之一。 就 Azure 角色而言,索引器沒有個別的身分識別;使用搜尋服務的系統或使用者指派的受控識別,建立從搜尋引擎到另一個 Azure 資源的連線。 如果索引器連線到虛擬網路上的 Azure 資源,您應該建立該連線的共用私人連結。 如需安全連線的詳細資訊,請參閱 Azure AI 搜尋中的安全性。
檢查結果
監視索引子狀態以檢查狀態。 成功執行仍可包含警告和通知。 請務必檢查成功和失敗狀態通知,以取得作業的詳細資料。
如需內容驗證,請在填入的索引上執行查詢,以傳回整個文件或選取的欄位。
變更偵測和內部狀態
如果您的資料來源支援變更偵測,索引子可以偵測資料中的基礎變更,並只處理每次索引子執行中的新增或更新的文件,讓未變更的內容照原樣保留。 如果索引器執行歷程記錄指出執行成功且 已處理 0/0 檔,表示索引器在基礎數據源中找不到任何新的或已變更的數據列或 Blob。
變更偵測邏輯內建於資料平台。 索引子對變更偵測的支援會因資料來源而有所不同:
Azure 儲存體具有內建變更偵測,這表示索引子可以自動辨識新增和更新的文件。 Blob 儲存體、Azure 表格儲存體和 Azure Data Lake Storage Gen2 會為每個 Blob 或資料列更新加上日期和時間的戳記。 索引子會自動使用這項資訊來判斷要在索引中更新的文件。 如需刪除偵測的詳細資訊,請參閱使用索引器進行 Azure 儲存體 變更和刪除偵測。
雲端資料庫會在其平台中提供選用的變更偵測功能。 針對這些資料來源,變更偵測不會自動進行。 您必須在資料來源定義中指定使用哪個原則:
索引子會從資料來源透過內部「高浮水印」追蹤所處理的最後一份文件。 此標記永遠不會在 API 中公開,但在內部,索引子會追蹤其停止的位置。 當編制索引繼續時,透過排程執行或隨需叫用,索引子可參考高浮水印,以便挑選離開的位置。
如果您需要清除高浮水印以全部重新編制索引,您可以使用重設索引子。 如需更多重新編制索引選擇,請使用重設技能或重設文件。 透過重設 API,您可以清除內部狀態,並在啟用漸進式擴充時清除快取。 如要進一步了解每個重設選項的背景和比較,請參閱執行或重設索引子、技能和文件。