共用方式為


建立或更新資料來源 (預覽 REST API)

適用於:2023-07-01-Preview。 不再支援此版本。 立即 升級至較新版本。

重要

2023-07-01-Preview (無變更)。

2021-04-30-Preview 新增索引器連線至其他 Azure 資源的受控識別支援:

  • 「認證」 接受 Azure 資源識別碼做為值,前提是搜尋服務是在受控識別下執行,而 Azure 角色指派會將讀取許可權授與數據。
  • 「身分識別」 接受使用者指派的受控識別。 此屬性是數據連線的第一層。 它也在 「encryptionKey」 中擷取 Azure Key Vault 中客戶管理的密鑰。
  • Azure 檔案服務 支援處於預覽狀態。 使用預覽 API 從這個數據源編製索引。

2020-06-30-Preview 新增:

  • “dataDeletionDetectionPolicy” 接受 Blob 索引器的 “NativeBlobSoftDeleteDeletionDetectionPolicy”。
  • 適用於 MySQL 的 Azure 資料庫 支援處於預覽狀態。 使用預覽 API 從這個數據源編製索引。
  • Cosmos DB MongoDB API 和 Gremlin API 支援處於預覽狀態。 使用預覽 API 從這個數據源編製索引。

在 Azure AI 搜尋中,數據源會與 索引器搭配使用,提供目標索引的隨選或排程數據重新整理連線資訊,從 支援的數據源提取數據

您可以在建立要求上使用 POST 或 PUT。 對於任一個,要求主體會提供物件定義。

POST https://[service name].search.windows.net/datasources?api-version=[api-version]  
    Content-Type: application/json  
    api-key: [admin key]  

針對更新要求,請使用 PUT 並在 URI 上指定索引器名稱。

PUT https://[service name].search.windows.net/datasources/[data source name]?api-version=[api-version]
    Content-Type: application/json  
    api-key: [admin key]    

所有服務要求都需要 HTTPS。 如果物件不存在,則會建立它。 如果已經存在,則會使用新的定義覆寫它。

注意

數據源存在之後,您無法在更新要求上變更 type 屬性。 相反地,您應該使用您想要的類型來建立新的數據源。

URI 參數

參數 描述
服務名稱 必填。 將此設定為搜尋服務的唯一用戶定義名稱。
數據源名稱 如果使用 PUT,則為 URI 的必要專案。 名稱必須是小寫、以字母或數字開頭、沒有斜線或點,且少於 128 個字元。 使用字母或數字啟動名稱之後,只要虛線不連續,名稱的其餘部分就可以包含任何字母、數位和破折號。
api-version 必填。 如需更多版本,請參閱 API 版本

要求標頭

下表描述必要和選擇性的要求標頭。

領域 描述
Content-Type 必填。 將此設定為 application/json
api-key 如果您使用 Azure 角色,而且要求會提供持有人令牌,則為選擇性,否則需要密鑰。 api-key 是唯一的系統產生字串,可驗證對搜尋服務的要求。 建立要求必須包含設定為系統管理密鑰的 api-key 標頭(而不是查詢密鑰)。 如需詳細資訊,請參閱使用密鑰驗證 連線到 Azure AI 搜尋服務

要求本文

要求的本文包含數據源定義,其中包括數據源類型、讀取數據的認證,以及選擇性的數據變更偵測和數據刪除偵測原則,這些原則可用來在搭配定期排程的索引器使用時,有效識別數據源中已變更或刪除的數據

下列 JSON 是定義主要部分的高階表示法。

{   
    "name" : (optional on PUT; required on POST) "Name of the data source",  
    "description" : (optional) "Anything you want, or nothing at all",  
    "type" : (required) "Must be a supported data source",
    "credentials" : (required) { "connectionString" : "Connection string for your data source" },  
    "container" : (required) { "name" : "Name of the table, collection, or blob container you wish to index" },  
    "dataChangeDetectionPolicy" : (optional) {See below for details },
    "dataDeletionDetectionPolicy" : (optional) {See below for details },
    "identity": (optional) {Sets the Resource ID of a managed identity. See below for details },
    "encryptionKey":(optional) { 
      "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
      "keyVaultKeyVersion": "Version of the Azure Key Vault key",
      "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key.",
      "identity": "(Resource ID of a user-assigned managed identity, used for connecting to key vault)",
      "accessCredentials": (Credentials for connecting to key vault. Omit if using a managed identity) {
        "applicationId": "Azure AD Application ID that has access permissions to the key vault",
        "applicationSecret": "Authentication key of the specified Azure AD application)"}
      }
} 

要求包含下列屬性:

財產 描述
名字 必填。 數據源的名稱。 數據源名稱只能包含小寫字母、數位或破折號,不能以破折號開頭或結尾,而且限制為128個字元。
描述 選擇性描述。
類型 必填。 必須是其中一個支持的數據源類型

adlsgen2Azure Data Lake Storage Gen2
azureblobAzure Blob 記憶體
azurefilesAzure 檔案記憶體
azuresqlAzure SQL Database
azuretableAzure Cosmos DB SQL API的 Azure 數據表記憶體
cosmosdbMongoDB APIGremlin API
mysql適用於 MySQL 的 Azure 資料庫
認證 必填。 包含指定如何連線的 connectionString 屬性。
容器 必填。 指定要編製索引之數據的容器、集合、數據表或檢視表。
dataChangeDetectionPolicy 自選。 指定數據平臺提供的機制,以識別已變更的數據項。
dataDeletionDetectionPolicy 自選。 識別數據平臺刪除數據的方式。
encryptionKey 自選。 用於透過 Azure Key Vault 中 客戶管理的加密金鑰 (CMK),來額外加密數據源認證。 適用於在 2019-01-01-01 上建立或之後建立的可計費搜尋服務。
禁用 自選。 布爾值,指出索引器是否處於停用狀態建立,這可防止索引器立即執行。 False 預設為 False。
身份 自選。 其中包含類型 #Microsoft.Azure.Search.DataUserAssignedIdentityuserAssignedIdentity,並指定外部資源的 用戶指派的受控識別。 此屬性取決於 credentials 每個數據源類型的受控識別連線具有正確格式的連接字串(資源識別符)。

如果 identity 屬性為 null,則會使用系統管理的 屬性建立與資源標識符的連線。

如果此屬性指派給類型 #Microsoft.Azure.Search.DataNoneIdentity,則會清除先前指定的任何明確識別。

回應

若要求成功:如果已建立新的數據源,則建立 201;如果現有數據源已更新,則為 204 沒有內容。

例子

範例:Azure 角色和系統指派的受控識別

如果您的搜尋服務具有系統指派的受控識別和角色指派,數據源聯機可以是記憶體帳戶的唯一資源標識符。

{
    "name": "azure-blob-ds",
    "description": "a description of the blob data",
    "type": "azureblob",
    "subtype": null,
    "credentials": {
      "connectionString": "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;"
    },
    "container": {
      "name": "mycontainer"
    },
    "dataChangeDetectionPolicy": null,
    "dataDeletionDetectionPolicy": null,
  }

範例:Azure 角色和使用者指派的受控識別(預覽版)

此範例示範具有使用者指派受控識別之搜尋服務的 Azure AD 驗證連線。

{
    "name": "azure-blob-ds",
    "description": "a description of the blob data",
    "type": "azureblob",
    "subtype": null,
    "credentials": {
      "connectionString": "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;"
    },
    "container": {
      "name": "mycontainer"
    },
    "dataChangeDetectionPolicy": null,
    "dataDeletionDetectionPolicy": null,
    "identity": {
      "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
      "userAssignedIdentity": "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[user identity name]"
    }
  }

範例:具有變更偵測的 Azure SQL(高水位線變更偵測原則)

{   
    "name" : "asqldatasource",  
    "description" : "a description",  
    "type" : "azuresql",  
    "credentials" : { "connectionString" : "Server=tcp:....database.windows.net,1433;Database=...;User ID=...;Password=...;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },  
    "container" : { "name" : "sometable" },  
    "dataChangeDetectionPolicy" : { "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy", "highWaterMarkColumnName" : "RowVersion" }
}  

範例:具有變更偵測的 Azure SQL (SQL 整合式變更追蹤原則)

{   
    "name" : "asqldatasource",  
    "description" : "a description",  
    "type" : "azuresql",  
    "credentials" : { "connectionString" : "Server=tcp:....database.windows.net,1433;Database=...;User ID=...;Password=...;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },  
    "container" : { "name" : "sometable" },  
    "dataChangeDetectionPolicy" : { "@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy" }
}  

範例:具有變更偵測與刪除偵測的 Azure SQL

回想一下,刪除偵測的屬性是 “softDeleteColumnName” 和 “softDeleteMarkerValue”。

{   
    "name" : "asqldatasource",  
    "description" : "a description",  
    "type" : "azuresql",  
    "credentials" : { "connectionString" : "Server=tcp:....database.windows.net,1433;Database=...;User ID=...;Password=...;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },  
    "container" : { "name" : "sometable" },   
    "dataDeletionDetectionPolicy" : { "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy", "softDeleteColumnName" : "IsDeleted", "softDeleteMarkerValue" : "true" }  
}  

範例:僅具有必要屬性的數據源

如果您只想要針對資料的一次性復本使用資料源,則可以省略與變更和刪除偵測相關的選擇性屬性:

{   
    "name" : "asqldatasource",  
    "description" : "anything you want, or nothing at all",  
    "type" : "azuresql",  
    "credentials" : { "connectionString" : "Server=tcp:....database.windows.net,1433;Database=...;User ID=...;Password=...;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },  
    "container" : { "name" : "sometable" }  
}   

範例:使用未變更或修訂的認證選項

如果您想要更新數據源,則不需要認證。 <unchanged><redacted> 的值可用來取代連接字串。

{
    "name" : "adatasource",
    "description": "a description",
    "type": "azuresql",
    "credentials": { "connectionString": "<unchanged>" },
    "container" : { "name": "sometable" }
}

範例:加密金鑰

加密金鑰是用於其他加密的客戶自控金鑰。 如需詳細資訊,請參閱在 Azure Key Vault 中使用客戶管理的金鑰 加密

{
    "name" : "adatasource",
    "description": "a description",
    "type": "azuresql",
    "credentials": { "connectionString": "<unchanged>" },
    "container" : { "name": "sometable" },
    "encryptionKey": (optional) { 
      "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
      "keyVaultKeyVersion": "Version of the Azure Key Vault key",
      "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
      "accessCredentials": (optional, only if not using managed identity) {
        "applicationId": "Azure Active Directory Application ID that was granted access permissions to your specified Azure Key Vault",
        "applicationSecret": "Authentication key of the specified Azure AD application)"}
      }
}

範例:搜尋服務具有使用者指派受控識別的加密密鑰保存庫連線

此範例省略 accessCredentials。 對於具有 使用者指派受控識別的資源, 指派給它,您可以在 encryptionKey 中指定身分識別,並使用該身分識別和 Azure 角色指派來擷取密鑰。

{
    "name" : "adatasource",
    "description": "a description",
    "type": "azuresql",
    "credentials": { "connectionString": "<unchanged>" },
    "container" : { "name": "sometable" },
    "encryptionKey": (optional) { 
      "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
      "keyVaultKeyVersion": "Version of the Azure Key Vault key",
      "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
      "identity": {
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/contoso-identity"
        }
    }
}

定義

連結 描述
容器 指定要編製索引之數據的容器、集合、數據表或檢視表。
認證 包含 connectionString 屬性,指定索引器如何連線到 Azure 資源。
dataChangeDetectionPolicy 指定數據平臺提供的機制,以識別已變更的數據。
dataDeletionDetectionPolicy 指定偵測已刪除資料的機制。
encryptionKey 設定與 Azure Key Vault 的連線,以進行客戶管理的加密。

容器

指定要編製索引之數據的容器、集合、數據表或檢視表。

屬性 描述
名字 必填。 針對 Azure Cosmos DB,指定 SQL API 集合。 針對 Azure Blob 記憶體,指定記憶體容器。 針對 Azure SQL,指定資料表或檢視表。 您可以使用架構限定名稱,例如 [dbo].[mytable]。 針對 Azure 資料表記憶體,指定資料表的名稱。
查詢 自選。 針對 Azure Cosmos DB,可讓您指定查詢,將任意 JSON 檔版面配置扁平化為 Azure AI 搜尋可編製索引的一般架構。 針對 Azure Blob 記憶體,可讓您在 Blob 容器內指定虛擬資料夾。 例如,針對 blob 路徑 mycontainer/documents/blob.pdfdocuments 可用來作為虛擬資料夾。 針對 Azure 資料表記憶體,可讓您指定查詢,以篩選要匯入的數據列集。 針對 Azure SQL,不支持查詢(請改用檢視)。

憑據

包含 「connectionString」 屬性,指定索引器如何連接到 Azure 資源。

屬性 描述
connectionString 必填。 指定索引器數據源的連接。 如果您要更新數據源定義,則不需要連接字串。 這些值 <unchanged><redacted> 可用來取代實際的連接字串。

對於使用金鑰或登入認證進行驗證的連接,這些值會顯示在連接字串中。 連接字串的格式取決於數據源類型:

針對 Azure SQL Database,這是一般的 SQL Server 連接字串。 如果您使用 Azure 入口網站來擷取連接字串,請選擇 [ADO.NET connection string] 選項。

針對 Azure Cosmos DB,連接字串的格式必須如下:"AccountEndpoint=https://[your account name].documents.azure.com;AccountKey=[your account key];Database=[your database id]"。 所有值都是必要值。 您可以在 Azure 入口網站中找到它們,

如果您使用 受控識別來驗證,則可以省略連線上的認證。

如需使用受控識別進行驗證的連線,連接字串會指定 Azure 資源識別元(請參閱下列連接字串格式的連結:Azure 記憶體Cosmos DBSQL Database)。

限定於外部數據源的角色指派會判斷索引器是否可以連線,而且搜尋服務必須設定為在 Azure Active Directory 中以受信任的服務身分執行。

如果同時指定 「身分識別」屬性,則會使用 「身分識別」屬性所提供的搜尋服務使用者指派的受控識別來建立連線。 否則,如果未指定「身分識別」或 Null,則聯機會透過系統管理的身分識別。

dataChangeDetectionPolicy

指定數據平臺提供的機制,以識別已變更的數據。 支持的原則會根據數據源類型而有所不同。

屬性 描述
dataChangeDetectionPolicy 自選。 有效的原則包括 HighWatermarkChangeDetectionPolicySqlIntegratedChangeDetectionPolicy

HighWatermarkChangeDetectionPolicy 相依於現有數據行或屬性,該數據行或屬性會與其他更新一起更新(所有插入都會導致浮浮浮水印數據行更新),且值變更較高。

SqlIntegratedChangeDetectionPolicy 可用來參考 SQL Server 中的原生變更偵測功能。 此原則只能與數據表搭配使用;它不能與檢視搭配使用。 您必須先啟用所使用資料表的變更追蹤,才能使用此原則。 如需指示,請參閱 啟用和停用變更追蹤
highWaterMarkColumnName HighWatermarkChangeDetectionPolicy的必要專案。 針對 Cosmos DB,數據行必須 _ts 屬性。 針對 Azure SQL,建議使用索引 rowversion 數據行。 針對 Azure 記憶體,變更偵測是使用 lastModified 值內建的,不需要設定 dataChangeDetectionPolicy。

dataDeletionDetectionPolicy

指定數據平台為識別已刪除資料所提供的機制。 支持的原則會根據數據源類型而有所不同。

屬性 描述
dataDeletionDetectionPolicy 自選。 有效值為 SoftDeleteColumnDeletionDetectionPolicyNativeBlobSoftDeleteDeletionDetectionPolicy (請參閱 原生 Blob 虛刪除 (預覽)]。

目前,唯一可用的原則是SoftDeleteColumnDeletionDetectionPolicy,它會根據數據源中「虛刪除」數據行或屬性的值來識別已刪除的專案。

softDeleteColumnName” 必填。 數據來源中的數據行名稱,提供指定數據列刪除狀態的值。 例如,您可以建立名為 「IsDeleted」 的資料行。 僅支援具有字串、整數或布爾值的數據行。
softDeleteMarkerValue 必填。 虛刪除資料行的值。 當做 softDeleteMarkerValue 使用的值必須是字串,即使對應的數據行保存整數或布爾值也一樣。 例如,如果資料來源中顯示的值為 1,請使用 「1」 作為 softDeleteMarkerValue。 如果索引器從虛刪除數據行讀取這個值,它會從搜尋索引中刪除對應的搜尋檔。

encryptionKey

設定與 Azure Key Vault 的連線,以取得補充 客戶管理的加密密鑰 (CMK)。 使用客戶管理的金鑰加密不適用於免費服務。 針對可計費的服務,它僅適用於在 2019-01-01 之後建立的搜尋服務。

必須驗證金鑰保存庫的連線。 您可以針對此目的使用 「accessCredentials」 或受控識別。

受控識別可以是系統或使用者指派(預覽)。 如果搜尋服務同時具有系統指派的受控識別,以及授與密鑰保存庫讀取許可權的角色指派,您可以省略「身分識別」和「accessCredentials」,而要求將會使用受控識別進行驗證。 如果搜尋服務具有使用者指派的身分識別和角色指派,請將 “identity” 屬性設定為該身分識別的資源標識符。

屬性 描述
keyVaultKeyName 必填。 用於加密的 Azure Key Vault 金鑰名稱。
keyVaultKeyVersion 必填。 Azure Key Vault 金鑰的版本。
keyVaultUri 必填。 提供密鑰的 Azure Key Vault URI(也稱為 DNS 名稱)。 範例 URI 可能會 https://my-keyvault-name.vault.azure.net
accessCredentials 如果您使用受控識別,請省略 。 否則,accessCredentials 的屬性包括 applicationId(具有您指定 Azure Key Vault 訪問許可權的 Azure Active Directory 應用程式識別符),以及 applicationSecret(指定 Azure AD 應用程式的驗證密鑰)。
身份 除非您針對 Azure Key Vault 的搜尋服務連線使用使用者指派的受控識別,否則為選擇性。 格式為 "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"

另請參閱