共用方式為


使用 PowerShell 管理 Azure AI 搜尋服務

您可以在 Windows、Linux 或 Azure Cloud Shell 中執行 PowerShell Cmdlet 和指令碼,以建立及設定 Azure AI 搜尋服務。

使用 Az.Search 模組來執行下列工作:

有時候我們會收到與「沒有」列於上方的工作相關的問題。

您無法以程式設計方式或在 Azure 入口網站中變更服務的名稱或區域。 建立服務時會配置專用資源,因此變更基礎硬體(位置或節點類型)需要新的服務。

備註

搜尋管理 REST APIAzure 入口網站支援變更定價層。 目前,您只能在基本層與標準層 (S1、S2 和 S3) 之間切換。

您無法使用工具或 API 在服務之間傳輸索引之類的內容。 在服務中以程式設計的方式建立內容,必須透過搜尋服務 REST APIAzure SDK for .NET 之類的 SDK。 雖然內容移轉沒有專用命令,您仍可撰寫呼叫 REST API 或用戶端程式庫的指令碼,在新服務上建立並載入索引。

Az.Search 模組通常無法使用預覽管理功能。 如果您想使用預覽功能,請使用管理 REST API 及預覽的 API 版本。

Az.Search 模組會擴展Azure PowerShell,以與搜尋管理 REST API 集的穩定版本完全一致。

檢查版本和負載模組

本文提供互動式範例,且需要較高的權限。 請務必具備本地 PowerShell 和 Azure PowerShell (Az 模組)。

PowerShell 版本檢查

如果您還沒有,請安裝 PowerShell 的最新版本

$PSVersionTable.PSVersion

載入 Azure PowerShell

如果您不確定 Az 是否已安裝,請執行下列命令進行驗證。

Get-InstalledModule -Name Az

部分系統不會自動載入模組。 如果您執行上一個命令時顯示錯誤,請嘗試載入模組。如果失敗,請回顧 Azure PowerShell 安裝指示,檢查是否有遺漏的步驟。

Import-Module -Name Az

用瀏覽器登入權杖連線至 Azure

您可以使用入口網站的登入認證在 PowerShell 中連線至訂閱。 或者,您可以非互動的方式使用服務主體進行驗證

Connect-AzAccount

如果您有多個 Azure 訂閱,請設定您的 Azure 訂閱。 如果想查看目前的訂用帳戶清單,請執行這個命令。

Get-AzSubscription | sort SubscriptionName | Select SubscriptionName

若要指定訂用帳戶,請執行下列命令。 在下列範例中,訂用帳戶的名稱為 ContosoSubscription

Select-AzSubscription -SubscriptionName ContosoSubscription

列出訂閱中的服務

下列命令來自 Az.Resources,會傳回已佈建在您訂閱中現有資源和服務的資訊。 如果您不知道已建立多少搜尋服務,這些命令會傳回該資訊,讓您不必造訪 Azure 入口網站。

第一個命令會傳回所有搜尋服務。

Get-AzResource -ResourceType Microsoft.Search/searchServices | ft

從服務清單中返回特定資源的資訊。

Get-AzResource -ResourceName <service-name>

輸出的結果應該會類似如下。

Name              : my-demo-searchapp
ResourceGroupName : demo-westus
ResourceType      : Microsoft.Search/searchServices
Location          : westus
ResourceId        : /subscriptions/<alphanumeric-subscription-ID>/resourceGroups/demo-westus/providers/Microsoft.Search/searchServices/my-demo-searchapp

匯入 Az.Search

來自 Az.Search 的命令在載入模組以前無法使用。

Install-Module -Name Az.Search -Scope CurrentUser

列出所有 Az.Search 命令

驗證時,系統會傳回模組中提供的命令清單。

Get-Command -Module Az.Search

輸出的結果應該會類似如下。

CommandType     Name                                               Version     Source                                                                
-----------     ----                                               -------     ------                                                                
Cmdlet          Get-AzSearchAdminKeyPair                           0.10.0      Az.Search                                                             
Cmdlet          Get-AzSearchPrivateEndpointConnection              0.10.0      Az.Search                                                             
Cmdlet          Get-AzSearchPrivateLinkResource                    0.10.0      Az.Search                                                             
Cmdlet          Get-AzSearchQueryKey                               0.10.0      Az.Search                                                             
Cmdlet          Get-AzSearchService                                0.10.0      Az.Search                                                             
Cmdlet          Get-AzSearchSharedPrivateLinkResource              0.10.0      Az.Search                                                             
Cmdlet          New-AzSearchAdminKey                               0.10.0      Az.Search                                                             
Cmdlet          New-AzSearchQueryKey                               0.10.0      Az.Search                                                             
Cmdlet          New-AzSearchService                                0.10.0      Az.Search                                                             
Cmdlet          New-AzSearchSharedPrivateLinkResource              0.10.0      Az.Search                                                             
Cmdlet          Remove-AzSearchPrivateEndpointConnection           0.10.0      Az.Search                                                             
Cmdlet          Remove-AzSearchQueryKey                            0.10.0      Az.Search                                                             
Cmdlet          Remove-AzSearchService                             0.10.0      Az.Search                                                             
Cmdlet          Remove-AzSearchSharedPrivateLinkResource           0.10.0      Az.Search                                                             
Cmdlet          Set-AzSearchPrivateEndpointConnection              0.10.0      Az.Search                                                             
Cmdlet          Set-AzSearchService                                0.10.0      Az.Search                                                             
Cmdlet          Set-AzSearchSharedPrivateLinkResource              0.10.0      Az.Search   

如果您有該套件的較舊版本,請更新模組以取得最新功能。

Update-Module -Name Az.Search

取得搜尋服務資訊

匯入 Az.Search 且了解包含搜尋服務的資源群組之後,請執行 Get-AzSearchService 來傳回服務定義,包括名稱、區域、階層、複本和分割區計數。 針對這項命令,請提供包含搜尋服務的資源群組。

Get-AzSearchService -ResourceGroupName <resource-group-name>

輸出的結果應該會類似如下。

Name              : my-demo-searchapp
ResourceGroupName : demo-westus
ResourceType      : Microsoft.Search/searchServices
Location          : West US
Sku               : Standard
ReplicaCount      : 1
PartitionCount    : 1
HostingMode       : Default
ResourceId        : /subscriptions/<alphanumeric-subscription-ID>/resourceGroups/demo-westus/providers/Microsoft.Search/searchServices/my-demo-searchapp

建立或刪除服務

New-AzSearchService 會用來建立新的搜尋服務

New-AzSearchService -ResourceGroupName <resource-group-name> -Name <search-service-name> -Sku "Standard" -Location "West US" -PartitionCount 3 -ReplicaCount 3 -HostingMode Default

輸出的結果應該會類似如下。

ResourceGroupName : demo-westus
Name              : my-demo-searchapp
Id                : /subscriptions/<alphanumeric-subscription-ID>/demo-westus/providers/Microsoft.Search/searchServices/my-demo-searchapp
Location          : West US
Sku               : Standard
ReplicaCount      : 3
PartitionCount    : 3
HostingMode       : Default
Tags

Remove-AzSearchService 用來刪除服務及其資料。

Remove-AzSearchService -ResourceGroupName <resource-group-name> -Name <search-service-name>

系統會要求您確認動作。

Confirm
Are you sure you want to remove Search Service 'pstestazuresearch01'?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

使用 IP 規則建立服務

視您的安全性需求而定,不妨建立具備已設定 IP 防火牆的搜尋服務。 為此,請先定義 IP 規則,然後將其傳遞至 IPRuleList 參數,如下所示。

$ipRules = @([pscustomobject]@{Value="55.5.63.73"},
		[pscustomobject]@{Value="52.228.215.197"},
		[pscustomobject]@{Value="101.37.221.205"})

 New-AzSearchService -ResourceGroupName <resource-group-name> `
                      -Name <search-service-name> `
                      -Sku Standard `
                      -Location "West US" `
                      -PartitionCount 3 -ReplicaCount 3 `
                      -HostingMode Default `
                      -IPRuleList $ipRules

使用系統指派的受控識別建立服務

在部分情況下,例如使用受控識別連線至資料來源時,您必須啟用系統指派的受控識別。 做法是將 -IdentityType SystemAssigned 新增至命令。

New-AzSearchService -ResourceGroupName <resource-group-name> `
                      -Name <search-service-name> `
                      -Sku Standard `
                      -Location "West US" `
                      -PartitionCount 3 -ReplicaCount 3 `
                      -HostingMode Default `
                      -IdentityType SystemAssigned

建立 S3HD 服務

建立 S3HD 服務時,會使用 -Sku-HostingMode 的組合。 將 -Sku 設為 Standard3,並將 -HostingMode 設為 HighDensity

New-AzSearchService -ResourceGroupName <resource-group-name> `
                      -Name <search-service-name> `
                      -Sku Standard3 `
                      -Location "West US" `
                      -PartitionCount 1 -ReplicaCount 3 `
                      -HostingMode HighDensity

使用私人端點建立服務

適用於 Azure AI 搜尋服務的私人端點可讓虛擬網路上的用戶端透過私人連結,安全存取搜尋索引中的資料。 私人端點會使用來自虛擬網路位址空間的 IP 位址來執行搜尋服務。 用戶端和搜尋服務之間的網路流量會經過 Microsoft 骨幹網路上的虛擬網路和私人連結,避免暴露在公開網際網路中。 如需詳細資訊,請參閱為 Azure AI 搜尋服務建立私人端點

下列範例顯示如何用私人端點建立搜尋服務。

首先,部署將 PublicNetworkAccess 設定為 Disabled 的搜尋服務。

$searchService = New-AzSearchService `
    -ResourceGroupName <search-service-resource-group-name> `
    -Name <search-service-name> `
    -Sku Standard `
    -Location "West US" `
    -PartitionCount 1 -ReplicaCount 1 `
    -HostingMode Default `
    -PublicNetworkAccess Disabled

接著建立虛擬網路、私人網路連線以及私人端點。

# Create the subnet
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
    -Name <subnet-name> `
    -AddressPrefix 10.1.0.0/24 `
    -PrivateEndpointNetworkPolicies Disabled 

# Create the virtual network
$virtualNetwork = New-AzVirtualNetwork `
    -ResourceGroupName <vm-resource-group-name> `
    -Location "West US" `
    -Name <virtual-network-name> `
    -AddressPrefix 10.1.0.0/16 `
    -Subnet $subnetConfig

# Create the private network connection
$privateLinkConnection = New-AzPrivateLinkServiceConnection `
    -Name <private-link-name> `
    -PrivateLinkServiceId $searchService.Id `
    -GroupId searchService

# Create the private endpoint
$privateEndpoint = New-AzPrivateEndpoint `
    -Name <private-endpoint-name> `
    -ResourceGroupName <private-endpoint-resource-group-name> `
    -Location "West US" `
    -Subnet $virtualNetwork.subnets[0] `
    -PrivateLinkServiceConnection $privateLinkConnection

最後,建立私人 DNS 區域。

## Create private dns zone
$zone = New-AzPrivateDnsZone `
    -ResourceGroupName <private-dns-resource-group-name> `
    -Name "privatelink.search.windows.net"

## Create dns network link
$link = New-AzPrivateDnsVirtualNetworkLink `
    -ResourceGroupName <private-dns-link-resource-group-name> `
    -ZoneName "privatelink.search.windows.net" `
    -Name "myLink" `
    -VirtualNetworkId $virtualNetwork.Id

## Create DNS configuration 
$config = New-AzPrivateDnsZoneConfig `
    -Name "privatelink.search.windows.net" `
    -PrivateDnsZoneId $zone.ResourceId

## Create DNS zone group
New-AzPrivateDnsZoneGroup `
    -ResourceGroupName <private-dns-zone-resource-group-name> `
    -PrivateEndpointName <private-endpoint-name> `
    -Name 'myZoneGroup' `
    -PrivateDnsZoneConfig $config

如需深入了解如何在 PowerShell 中建立私人端點,請參閱此私人連結快速入門

管理私人端點連線

除了建立私人端點連線,您還可以 GetSetRemove 連線。

Get-AzSearchPrivateEndpointConnection 是用來擷取私人端點連線並查看其狀態。

Get-AzSearchPrivateEndpointConnection -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name>

Set-AzSearchPrivateEndpointConnection 是用來更新連線。 下列範例將私人端點連線設定為已拒絕:

Set-AzSearchPrivateEndpointConnection -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name> -Name <pe-connection-name> -Status Rejected  -Description "Rejected"

Remove-AzSearchPrivateEndpointConnection 是用來刪除私人端點連線。

 Remove-AzSearchPrivateEndpointConnection -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name> -Name <pe-connection-name>

重新產生系統管理金鑰

New-AzSearchAdminKey 是用來變換管理員 API 金鑰。 每項服務各會建立兩個系統管理金鑰來進行已驗證的存取。 每項要求都必須使用金鑰。 兩個系統管理金鑰具備相同的功能,都能將完整的寫入權限授與搜尋服務,且能擷取任何資訊,或者建立及刪除任何物件。 之所以產生兩個金鑰,是為了能在使用其中之一的期間更換另一個金鑰。

您一次只能重新產生一個金鑰,分別為 primary 金鑰或 secondary 金鑰。 若要讓服務不受中斷,請記得更新所有用戶端程式碼,藉此在主要金鑰變換期間使用次要金鑰。 請避免於作業進行時變更金鑰。

您可能也料想得到,如果您在沒有更新用戶端程式碼的情況下重新產生金鑰,使用舊金鑰的要求就會失敗。 重新產生所有新金鑰並不會永久鎖定您的服務,您仍然可以透過 Azure 入口網站 存取服務。 重新產生主要和次要金鑰後,您就可更新用戶端程式碼來使用新的金鑰,作業也能因此繼續進行。

API 金鑰的值由服務產生, 您無法提供自訂金鑰讓 Azure AI 搜尋服務使用。 同理,系統管理 API 金鑰也不能採用使用者定義的名稱。 金鑰的參考對象都是固定字串,不是 primary 就是 secondary

New-AzSearchAdminKey -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name> -KeyKind Primary

輸出的結果應該會類似如下。 即使您一次只變更一個金鑰,系統依然會傳回兩個金鑰。

Primary                    Secondary
-------                    ---------
<alphanumeric-guid>        <alphanumeric-guid>  

建立或刪除查詢金鑰

New-AzSearchQueryKey 是用來建立查詢 API 金鑰,以便為用戶端應用程式提供 Azure AI 搜尋服務索引的唯讀存取權。 查詢金鑰是用來驗證特定索引,以便擷取搜尋結果。 查詢金鑰無法授與服務上其他項目 (例如索引、資料來源或索引子) 唯讀存取權。

您無法提供金鑰讓 Azure AI 搜尋服務使用。 API 金鑰會由服務產生。

New-AzSearchQueryKey -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name> -Name <query-key-name> 

調整複本和分割區

Set-AzSearchService 是用來增加或減少複本及分割區,以便重新調整服務內的可計費資源。 增加複本或分割區會提高帳單費用,包括固定和變動費用。 如果您暫時需要額外的處理能力,可增加複本和分割區來處理工作負載。 概觀入口頁面的監控區域有查詢延遲、每秒查詢次數及節流的圖塊,用於指示現有容量是否足夠。

新增或移除資源處理需要一些時間來完成。 調整容量的過程會於背景進行,使現有的工作負載不受干擾。 一旦額外容量準備就緒,就會立即用於傳入的要求,無需進一步設定。

移除容量可能會造成中斷, 建議於減少容量前停下所有編製索引和索引子工作,避免要求遭到捨棄。 如果無法這麼做,建議您以漸進式方法減少容量,一次減少一個複本和分割區,直到達到新的目標層級為止。

命令一經提交,即無法中途終止。 您必須等候命令完成,才能修改計數。

Set-AzSearchService -ResourceGroupName <search-service-resource-group-name> -Name <search-service-name> -PartitionCount 6 -ReplicaCount 6

輸出的結果應該會類似如下。

ResourceGroupName : demo-westus
Name              : my-demo-searchapp
Location          : West US
Sku               : Standard
ReplicaCount      : 6
PartitionCount    : 6
HostingMode       : Default
Id                : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demo-westus/providers/Microsoft.Search/searchServices/my-demo-searchapp

透過 Azure AI 搜尋服務 API 建立的受保護資源私人端點,稱為「共用私人連結資源」。 這是因為您已針對與 Azure Private Link 服務整合的資源 (例如儲存體帳戶)「共用」存取權。

如果您使用索引子來為 Azure AI 搜尋服務中的資料編製索引,且資料來源位於私人網路上,則可以建立輸出私人端點連線以觸達該資料。

有關可從 Azure AI 搜尋服務建立輸出私人端點的完整 Azure 資源清單,以及相關群組識別碼的值,請參閱此處

New-AzSearchSharedPrivateLinkResource 是用來建立共用私人連結資源。 請記住,執行此命令前,可能須先為資料來源進行部分設定。

New-AzSearchSharedPrivateLinkResource -ResourceGroupName <search-serviceresource-group-name> -ServiceName <search-service-name> -Name <spl-name> -PrivateLinkResourceId /subscriptions/<alphanumeric-subscription-ID>/resourceGroups/<storage-resource-group-name>/providers/Microsoft.Storage/storageAccounts/myBlobStorage -GroupId <group-id> -RequestMessage "Please approve" 

Get-AzSearchSharedPrivateLinkResource 可讓您擷取共用私人連結資源並檢視其狀態。

Get-AzSearchSharedPrivateLinkResource -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name> -Name <spl-name>

您必須先使用下列命令來核准連線,之後才能使用。

Approve-AzPrivateEndpointConnection `
    -Name <spl-name> `
    -ServiceName <search-service-name> `
    -ResourceGroupName <search-service-resource-group-name> `
    -Description = "Approved"

Remove-AzSearchSharedPrivateLinkResource 是用來刪除共用私人連結資源。

$job = Remove-AzSearchSharedPrivateLinkResource -ResourceGroupName <search-service-resource-group-name> -ServiceName <search-service-name> -Name <spl-name> -Force -AsJob

$job | Get-Job

如需設定共用私人連結資源的完整詳細資料,請參閱透過私人端點建立索引子連線文件。

下一步

建置索引查詢索引,使用 Azure 入口網站、REST API 或 .NET SDK。