備註
Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。
Important
這些功能支援與其他 Microsoft 服務 及第三方服務的連結。 使用這些服務須遵守其各自的條款,可能導致資料處理或儲存超出 Azure 合規邊界,以及資料流入 Azure 合規邊界。
你有責任管理資料是否會超出組織的合規與地理邊界及相關影響,並確保適當的權限、邊界與核准被提供。
你有責任仔細審查並測試你在特定使用情境中所建置的應用程式,並做出所有適當的決策與客製化。 這包括實施你自己負責任的 AI 緩解措施,例如元提示、內容過濾器或其他安全系統,並確保你的應用程式符合適當的品質、可靠性、安全性與可信度標準。 欲了解更多資訊,請參閱Azure AI 搜尋服務透明度說明。
Azure Data Lake Storage Gen2 索引器會將 Azure Data Lake Storage Gen2(ADLS Gen2)的內容匯入 Azure AI 搜尋服務 索引。 索引子的輸入是單一容器中的 Blob。 輸出是搜尋索引,且各欄位中儲存可搜尋的內容和中繼資料。
本文提供從 ADLS Gen2 編制索引的特定資訊,以補充建立索引子。 其中使用 REST API 來示範所有索引子通用的三部分工作流程:建立資料來源、建立索引、建立索引子。 提交建立索引子要求時會擷取資料。
如需 C# 中的程式碼範例,請參閱 在 GitHub 上 使用 Microsoft Entra ID 編製 資料湖 Gen2 索引 。
備註
ADLS Gen2 支援在 Blob 層級具有 Azure 角色型存取控制 (Azure RBAC) 和類似 POSIX 的存取控制清單 (ACL) 的 存取控制模型 。 Azure AI 搜尋服務現在可以在編製索引期間辨識 ADLS Gen2 Blob 中的檔層級許可權,並將這些許可權轉移至搜尋索引中的索引內容。 欲了解更多關於索引期間 ACL 擷取與 RBAC 範圍的資訊,請參閱「使用索引器索引存取控制清單」及「Azure 角色基礎存取控制範圍(預覽)」。
先決條件
已啟用階層式命名空間的 ADLS Gen2。 ADLS Gen2 可透過 Azure 儲存體取得。 設定儲存體帳戶時,您可以選擇啟用 階層式命名空間、將檔案組織成目錄和巢狀子目錄的階層。 藉由啟用階層式命名空間,您可以啟用 ADLS Gen2。
ADLS Gen2 的存取層包括熱、冷和封存。 搜尋引擎索引器只能存取熱資料和冷資料。
包含文字的 Blob。 如果您有二進位資料,您可以加上 AI 擴充以分析影像。 Blob 內容不能超過搜尋服務層級的 索引子限制 。
將來源索引與 AI 豐富化視為獨立的處理階段。 技能或外部服務的輸入限制可能低於索引器能擷取的內容量。 查看 你技能組中每個技能的參考文章 。
Azure 儲存體的讀取權限。 「完全存取」連接字串包含允許內容存取的金鑰,但如果您改用 Azure 角色,請確保搜尋服務受控識別具有儲存體 Blob 資料讀取者許可權。
使用 REST 用戶端編寫接近於本文示範的 REST 呼叫。
局限性
不同於 Blob 索引子,ADLS Gen2 索引子無法使用容器層級 SAS 權杖來列舉儲存體帳戶中的內容並編製索引。 此限制存在於索引器透過呼叫 檔案系統 - 取得屬性 API 來檢查儲存帳號是否啟用階層命名空間。 對於沒有啟用階層命名空間的儲存帳號,建議改用 blob 索引器 ,以確保 blob 的列舉效能。
如果屬性
metadata_storage_path對應為索引鍵欄位,則不保證 Blob 會在目錄重新命名時重新編製索引。 如果您想要重新編製屬於已重新命名目錄的 Blob 索引,請更新其全部的LastModified時間戳記。
支援的文件格式
ADLS Gen2 索引子可以從下列文件格式擷取文字:
- CSV (請參閱編製 CSV Blob 的索引)
- EML
- EPUB
- GZ
- HTML
- JSON (請參閱編製 JSON Blob 的索引)
- KML (用於地理標記法的 XML)
- Markdown
- Microsoft Office 格式:DOCX/DOC/DOCM、XLSX/XLS/XLSM、PPTX/PPT/PPTM、MSG (Outlook 電子郵件)、XML (2003 和 2006 WORD XML)
- 開放式文件格式:ODT、ODS、ODP
- 純文字檔案 (另請參閱編制純文字的索引)
- RTF
- XML
- ZIP
決定要編製索引的 Blob
設定索引前,請檢閱來源資料並判斷事先是否要進行任何變更。 索引子一次可編製一個容器的內容索引。 預設處理容器中所有的 Blob。 提供您數個更具選擇性的處理選項:
在虛擬資料夾中放置 Blob。 索引子資料來源定義包含可採用虛擬資料夾的「查詢」參數。 若您指定虛擬資料夾,只有資料夾中的 Blob 會編製索引。
依檔案類型包含或排除 Blob。 支援的文件格式清單可協助您判斷要排除的 Blob。 例如,您可能要排除不提供可搜尋文字的影像或音訊檔案。 此功能是透過索引子中的設定控制。
包含或排除任意 Blob。 如果您基於任何原因要跳過特定 Blob,請新增下列中繼資料屬性和值至 Blob 儲存體中的 Blob。 遇到此屬性時,索引子會跳過索引執行中的 Blob 或 Blob 內容。
如果你沒有設定包含或排除標準,索引器會把不合格的 blob 當成錯誤回報,然後繼續往下走。 若發生足夠的錯誤,處理可能停止。 您可在索引子設定中指定錯誤容錯。
索引子通常會為每個 Blob 建立一個搜尋文件,文件中的文字內容和中繼資料會擷取為索引中的可搜尋欄位。 如果 Blob 是整個檔案,您可以剖析這些 Blob 為多個搜尋文件。 例如,您可剖析 CSV 檔案中的資料列,並為每個資料列建立一個搜尋文件。
編製 Blob 中繼資料的索引
如果你認為任何標準或自訂的中繼資料屬性對篩選和查詢有用,則可以為 Blob 中繼資料建立索引。
使用者指定的中繼資料屬性會逐字擷取。 要接收這些值,你必須在搜尋索引中定義一個欄位,該欄位的類型 Edm.String 與 blob 的元資料鍵同名。 例如,如果某個 Blob 有一個名為 Sensitivity、值為 High 的中繼資料索引鍵,您應該在搜尋索引中定義一個名為 Sensitivity 的欄位,並以 High 的值填入該欄位。
標準 Blob 中繼資料屬性可擷取至相似的具名和具類型的欄位,如下所示。 Blob 索引子會自動針對這些 Blob 中繼資料屬性,建立內部欄位對應,並轉換原始連字號名稱 (「metadata-storage-name」) 為底線對等名稱 (「metadata_storage_name」)。
你仍然需要將底線欄位加入索引定義,但可以省略欄位映射,因為索引器會自動建立關聯。
metadata_storage_name (
Edm.String) - Blob 的檔案名稱。 例如,如果您有 blob /my-container/my-folder/subfolder/resume.pdf,這個欄位的值是resume.pdf。metadata_storage_path (
Edm.String) - Blob 的完整 URI,包含儲存體帳戶。 例如,https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdfmetadata_storage_content_type (
Edm.String) - 內容類型,即用來上傳 Blob 的程式碼指定類型。 例如:application/octet-stream。metadata_storage_last_modified (
Edm.DateTimeOffset) - Blob 上次修改的時間戳記。 Azure AI 搜尋服務會使用此時間戳記來識別已變更的 blob,以避免在初始編製索引之後重新對所有項目編制索引。metadata_storage_size (
Edm.Int64) - Blob 大小 (以位元組為單位)。metadata_storage_content_md5 (
Edm.String) - Blob 內容的 MD5 雜湊 (若有)。metadata_storage_sas_token (
Edm.String) - 臨時 SAS 權杖,自訂技能可使用此權杖存取 Blob。 建議您不要儲存此權杖作為之後使用,因為權杖可能過期。
最後,編製索引的 Blob 文件格式特定的任何中繼資料屬性,也可以索引結構描述呈現。 如需內容特定中繼資料的詳細資訊,請參閱內容中繼資料屬性。
請務必指出您的搜尋索引不必定義上述所有屬性的欄位,只要擷取應用程式所需的屬性。
定義資料來源
資料來源定義指定要編製索引的資料、認證,以及用於識別資料變更的原則。 資料來源定義為獨立的資源,因此可供多個索引子使用。
建立或更新資料來源以設定其定義:
{ "name" : "my-adlsgen2-datasource", "type" : "adlsgen2", "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" }, "container" : { "name" : "my-container", "query" : "<optional-virtual-directory-name>" } }將「type」設定為
"adlsgen2"(必要)。設定
"credentials"為 Azure 儲存體連接字串。 下一節說明支援的格式。設定
"container"為 Blob 容器,並使用 「query」 來指定任何子資料夾。
如果您希望索引子在來源文件標幟為刪除時,刪除時刪除搜尋文件,資料來源定義也可以包含虛刪除原則。
支援的認證和連接字串
索引子可以使用下列連線,連線 Blob 容器。
| 完整存取儲存體帳戶連接字串 |
|---|
{ "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key>;" } |
| 您可以從 Azure 入口網站中的 [記憶體帳戶] 頁面取得連接字串,方法是在左窗格中選取 [存取金鑰 ]。 請務必選取完整的連接字串,而不只是金鑰。 |
| 受控識別連接字串 |
|---|
{ "connectionString" : "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Storage/storageAccounts/<your storage account name>/;" } |
| 此連接字串不需要帳戶金鑰,但您之前必須將搜尋服務設為使用受控識別連線。 |
| 儲存體帳戶共享存取簽章(SAS)連線字串 |
|---|
{ "connectionString" : "BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl;" } |
| SAS 對於容器和物件 (在此案例中為 blob) 應該擁有列出和讀取權限。 |
備註
如果你使用 SAS 憑證,你需要定期更新資料來源憑證並更新簽章,以防止其過期。 若 SAS 憑證過期,索引器會以類似「連線字串中提供的憑證無效或已過期」的錯誤訊息失敗。
將搜尋欄位新增至索引
在搜尋索引中,新增欄位接受 Azure Blob 的內容和中繼資料。
建立或更新索引 以定義儲存 blob 內容與元資料的搜尋欄位:
{ "name" : "my-search-index", "fields": [ { "name": "ID", "type": "Edm.String", "key": true, "searchable": false }, { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false }, { "name": "metadata_storage_name", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true }, { "name": "metadata_storage_size", "type": "Edm.Int64", "searchable": false, "filterable": true, "sortable": true }, { "name": "metadata_storage_content_type", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true } ] }建立文件索引鍵欄位 ("key": true)。 如果是 Blob 內容,最佳候選是中繼資料屬性。
metadata_storage_path(預設) 物件或檔案的完整路徑。 鍵欄位(此例為「ID」)會被填入 metadata_storage_path 的值,因為它是預設值。metadata_storage_name,只有名稱是唯一名稱時,才能使用。 如果您要此欄位作為索引鍵,請將"key": true移至此欄位的定義。新增至 Blob 的自訂中繼資料屬性。 此選項需要 Blob 上傳程序新增該中繼資料屬性至所有 Blob。 由於鍵是必修屬性,任何缺少值的斑點都無法被索引。 如果您使用自訂中繼資料屬性作為索引鍵,請避免變更該屬性。 索引器會在相同 blob 的 key 屬性改變時新增重複文件。
中繼資料屬性通常包含對文件索引鍵無效的字元,例如
/和-。 索引子會自動編碼索引鍵中繼資料屬性,不需要任何設定或欄位對應。透過 Blob 的「內容」屬性,新增「內容」欄位儲存從每個檔案擷取的文字。 您不必使用此名稱,但這麼做即可利用隱含欄位對應。
設定並執行 ADLS Gen2 索引子
建立索引與資料來源之後,您就可以開始建立索引子。 索引器設定會指定輸入、參數和屬性,以控制執行期間行為。 您也可指定要編製索引的 Blob 部分。
建立或更新索引子,指定其名稱並參考資料來源和目標索引:
{ "name" : "my-adlsgen2-indexer", "dataSourceName" : "my-adlsgen2-datasource", "targetIndexName" : "my-search-index", "parameters": { "batchSize": null, "maxFailedItems": null, "maxFailedItemsPerBatch": null, "configuration": { "indexedFileNameExtensions" : ".pdf,.docx", "excludedFileNameExtensions" : ".png,.jpeg", "dataToExtract": "contentAndMetadata", "parsingMode": "default" } }, "schedule" : { }, "fieldMappings" : [ ] }如果預設(10 份文件)無法充分利用或超過可用資源,則設定「batchSize」。 預設批次大小是資料來源特定的。 基於平均文件大小較大的考量,Blob 索引會將批次大小設為 10 個文件。
在「設定」下,根據檔案類型控制要編製索引的 Blob,或不指定檔案類型,然後擷取所有 Blob。
針對
"indexedFileNameExtensions",提供副檔名的逗號分隔清單 (包含前置點)。 針對"excludedFileNameExtensions"執行相同動作,並指出要跳過的副檔名。 如果同一個擴充名同時出現在兩個清單中,則不會被納入索引。在「設定」下,設定「dataToExtract」控制要編製索引的 Blob 部分:
「contentAndMetadata」指定所有中繼資料和從 Blob 擷取的文字內容要編製索引。 這是預設值。
「storageMetadata」指定只有標準 Blob 屬性和使用者指定的中繼資料要編製索引。
「allMetadata」指定從 Blob 內容擷取標準 Blob 屬性,和任何找到內容類型的中繼資料,然後編製索引。
在 [設定] 下,如果 Blob 應該對應至 多個搜尋檔,或它們是由 純文字、 JSON 檔或 CSV 檔案所組成,請設定 “parsingMode”。
如果欄位名稱或類型有差異,或如果您在搜尋索引中需要來源欄位的多個版本,請指定欄位對應。
在 Blob 索引中,您通常可以省略欄位對應,因為索引子使用內建支援對應「內容」和中繼資料屬性,與索引中類似的具名和具類型欄位。 對於中繼資料屬性,索引子會自動將連字號
-替換為搜尋索引中的底線。如需其他屬性的詳細資訊,請參閱建立索引子。 如需參數描述的完整清單,請參閱在 REST API 中建立索引子 (REST)。
索引器建立後會自動執行。 您可以將「停用」設為 true 避免此情況。 若要控制索引子執行,請按需執行索引子或安排排程執行。
檢查索引子狀態
若要監視索引子狀態和執行歷程記錄,請傳送取得索引子狀態要求:
GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]
回應包含狀態和已處理的項目數目。 回應會類似於下列範例:
{
"status":"running",
"lastResult": {
"status":"success",
"errorMessage":null,
"startTime":"2024-02-21T00:23:24.957Z",
"endTime":"2024-02-21T00:36:47.752Z",
"errors":[],
"itemsProcessed":1599501,
"itemsFailed":0,
"initialTrackingState":null,
"finalTrackingState":null
},
"executionHistory":
[
{
"status":"success",
"errorMessage":null,
"startTime":"2024-02-21T00:23:24.957Z",
"endTime":"2024-02-21T00:36:47.752Z",
"errors":[],
"itemsProcessed":1599501,
"itemsFailed":0,
"initialTrackingState":null,
"finalTrackingState":null
},
... earlier history items
]
}
執行歷程記錄包含最多 50 個最近完成的執行,以顛倒的時序排序,因此最後的執行最先出現。
處理錯誤
編製索引期間常發生的錯誤包括內容類型不支援、內容遺漏或 Blob 過大。
根據預設,遇到 blob 包含不支援的內容類型 (例如音訊檔案) 時,Blob 索引子會立即停止。 您可使用「excludedFileNameExtensions」參數,跳過特定的內容類型。 不過,您可能需要繼續編製索引 (即使發生錯誤),並在稍後偵錯個別文件。 如需索引子錯誤的詳細資訊,請參閱索引子疑難排解指導和索引子錯誤和警告。
發生錯誤時,有五個索引子屬性可控制索引子的回應。
PUT /indexers/[indexer name]?api-version=2026-04-01
{
"parameters" : {
"maxFailedItems" : 10,
"maxFailedItemsPerBatch" : 10,
"configuration" : {
"failOnUnsupportedContentType" : false,
"failOnUnprocessableDocument" : false,
"indexStorageMetadataOnlyForOversizedDocuments": false
}
}
}
| 參數 | 有效值 | Description |
|---|---|---|
| "maxFailedItems" | -1、null 或 0、正整數 | 如果處理期間 (剖析 Blob 或新增文件至索引時) 發生任何錯誤,仍要繼續編製索引, 請將這些屬性設為可接受失敗的次數。 無論錯誤發生的次數,-1 的值允許繼續編製索引。 否則,此值為正整數。 |
| "maxFailedItemsPerBatch" | -1、null 或 0、正整數 | 同上,但用於批次編製索引。 |
| "failOnUnsupportedContentType" | 真或假 | 如果索引子無法判斷內容類型,請指定是否繼續或放棄作業。 |
| "failOnUnprocessableDocument" | 真或假 | 如果索引子無法處理其他支援內容類型的文件,請指定是否繼續或放棄作業。 |
| "indexStorageMetadataOnlyForOversizedDocuments" | 真或假 | 預設會將過大的 Blob 視為錯誤。 如果你把這個參數設為 true,索引器會嘗試索引其元資料,即使內容無法被索引。 如需 Blob 的大小限制,請參閱服務限制。 |