從 適用於 MySQL 的 Azure 資料庫 彈性伺服器編製數據索引
重要
MySQL 支援目前處於公開預覽狀態,以 補充使用規定。 使用預覽 REST API(2020-06-30-preview 或更新版本)編製內容索引。 目前沒有入口網站支援。
在本文中,瞭解如何設定索引器,以從 適用於 MySQL 的 Azure 資料庫 匯入內容,並在 Azure AI 搜尋服務中加以搜尋。 索引器輸入是您在單一數據表或檢視表中的資料列。 輸出是具有個別欄位中可搜尋內容的搜尋索引。
本文補充建立索引器,其中包含從 適用於 MySQL 的 Azure 資料庫 彈性伺服器編製索引的特定資訊。 其中使用 REST API 來示範所有索引子通用的三部分工作流程:建立資料來源、建立索引、建立索引子。 提交建立索引子要求時會擷取資料。
設定為包含高水印和虛刪除時,索引器會針對 MySQL 資料庫採取所有變更、上傳和刪除。 它會反映搜尋索引中的這些變更。 提交建立索引子要求時會擷取資料。
必要條件
註冊預覽 以提供案例意見反應。 您可以在表單提交之後自動存取此功能。
適用於 MySQL 的 Azure 資料庫 彈性伺服器和範例數據。 數據必須位於數據表或檢視表中。 需要主鍵。 如果您使用檢視,它必須具有 高水位線數據行。
讀取許可權。 完整存取 連接字串 包含密鑰,可授與內容的存取權,但如果您使用 Azure 角色,請確定搜尋服務受控識別具有 MySQL 的讀取者許可權。
-
您也可以使用適用於 .NET 的 Azure SDK。 您無法使用入口網站建立索引器,但您可以在建立索引器之後管理索引器和數據源。
預覽限制
目前,如果所有數據列的日期或時間戳統一,變更追蹤和刪除偵測將無法運作。 這項限制是預覽更新中要解決的已知問題。 在解決此問題之前,請勿將技能集新增至 MySQL 索引器。
預覽不支援幾何類型和 Blob。
如前所述,沒有入口網站支援建立索引器,但一旦存在,就可以在入口網站中管理 MySQL 索引器和數據源。 例如,您可以編輯定義,並重設、執行或排程索引器。
定義資料來源
數據源定義會指定要用來識別數據變更之索引、認證和原則的數據。 數據源會定義為獨立的資源,以便供多個索引器使用。
建立或更新數據源 會指定定義。 建立數據源時,請務必使用預覽 REST API 版本(2020-06-30-Preview 或更新版本)。
{
"name" : "hotel-mysql-ds",
"description" : "[Description of MySQL data source]",
"type" : "mysql",
"credentials" : {
"connectionString" :
"Server=[MySQLServerName].MySQL.database.azure.com; Port=3306; Database=[DatabaseName]; Uid=[UserName]; Pwd=[Password]; SslMode=Preferred;"
},
"container" : {
"name" : "[TableName]"
},
"dataChangeDetectionPolicy" : {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "[HighWaterMarkColumn]"
}
}
重點︰
設定
type
為"mysql"
(必要)。設定
credentials
為 ADO.NET 連接字串。 您可以在 MySQL 的 連線 ion 字串頁面上,於 Azure 入口網站 中找到 連接字串。設定
container
為數據表的名稱。設定
dataChangeDetectionPolicy
數據是否為揮發性,而且您希望索引器在後續執行時只挑選新的和更新的專案。dataDeletionDetectionPolicy
如果您要移除來源專案時,從搜尋索引中移除搜尋檔, 請設定 。
建立索引
建立或更新索引 會指定索引架構:
{
"name" : "hotels-mysql-ix",
"fields": [
{ "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
{ "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false },
{ "name": "Category", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
{ "name": "City", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
{ "name": "Description", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false }
]
}
如果源數據表中的主鍵符合檔索引鍵(在此案例中為 “ID”),索引器會將主鍵匯入為檔案索引鍵。
對應數據類型
下表會將 MySQL 資料庫對應至 Azure AI 搜尋對等專案。 如需詳細資訊,請參閱支持的數據類型(Azure AI 搜尋)。
注意
預覽不支援幾何類型和 Blob。
MySQL 數據類型 | Azure AI 搜尋欄位類型 |
---|---|
bool , boolean |
Edm.Boolean、Edm.String |
tinyint 、、smallint mediumint 、int 、、integer 、year |
Edm.Int32、Edm.Int64、Edm.String |
bigint |
Edm.Int64、Edm.String |
float 、 、 double real |
Edm.Double、Edm.String |
date 、 、 datetime timestamp |
Edm.DateTimeOffset、Edm.String |
char 、varchar 、tinytext 、mediumtext 、text 、longtext 、enum 、 set time |
Edm.String |
無符號數值數據, 序列, 十進位, dec, 位, blob, 二進位, 幾何 | N/A |
設定和執行 MySQL 索引器
建立索引與資料來源之後,您就可以開始建立索引子。 索引子會設定指定輸入、參數和屬性,控制執行階段行為。
建立或更新索引子,指定其名稱並參考資料來源和目標索引:
{
"name" : "hotels-mysql-idxr",
"dataSourceName" : "hotels-mysql-ds",
"targetIndexName" : "hotels-mysql-ix",
"disabled": null,
"schedule": null,
"parameters": {
"batchSize": null,
"maxFailedItems": null,
"maxFailedItemsPerBatch": null,
"base64EncodeKeys": null,
"configuration": { }
},
"fieldMappings" : [ ],
"encryptionKey": null
}
重點︰
如果欄位名稱或類型有差異,或您需要搜尋索引中多個版本的來源欄位,請指定欄位對應。
索引子建立後會自動執行。 您可以將 設定
disabled
為true
,以防止它執行。 若要控制索引子執行,請視需要執行索引子或排程執行索引子。
檢查索引子狀態
傳送取得 索引器狀態 要求以監視索引器執行:
GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2023-11-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 筆最近完成的執行,並由新至舊排序,所以最先顯示最後一次執行。
為新的和已變更的數據列編製索引
索引器填入搜尋索引之後,您可能會想要後續的索引器執行,以累加方式為資料庫中的新和已變更的數據列編製索引。
若要啟用累加式索引編製,請在數據源定義中設定 dataChangeDetectionPolicy
屬性。 這個屬性會告知索引器您的數據使用哪些變更追蹤機制。
對於 適用於 MySQL 的 Azure 資料庫 索引器,唯一支持的原則是 HighWaterMarkChangeDetectionPolicy
。
索引器變更偵測原則依賴高 浮水印 數據行來擷取數據列版本,或上次更新數據列的日期和時間。 其數據粒度通常為 DATE
、 DATETIME
或 TIMESTAMP
數據行,足以符合高水位標記數據行的需求。
在您的 MySQL 資料庫中,高水印數據行必須符合下列需求:
- 所有數據插入都必須指定數據行的值。
- 專案的所有更新也會變更數據行的值。
- 此數據行的值會隨著每個插入或更新而增加。
- 您可以有效率地執行具有下列
WHERE
和ORDER BY
子句的查詢:WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]
下列範例顯示 具有變更偵測原則的數據源定義 :
{
"name" : "[Data source name]",
"type" : "mysql",
"credentials" : { "connectionString" : "[connection string]" },
"container" : { "name" : "[table or view name]" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName" : "[last_updated column name]"
}
}
重要
如果您使用檢視,您必須在索引器數據源中設定高水位標記原則。
如果源數據表在高水印數據行上沒有索引,MySQL 索引器所使用的查詢可能會逾時。特別是, ORDER BY [High Water Mark Column]
子句需要索引在數據表包含許多數據列時有效率地執行。
編製已刪除數據列的索引
從資料表或檢視中刪除資料列時,您通常也想要從搜尋索引中刪除那些數據列。 不過,如果從數據表實際移除數據列,索引器就無法推斷不存在的記錄存在。 解決方案是使用 虛刪除 技術,以邏輯方式刪除數據列,而不需從數據表中移除數據列。 將數據行新增至數據表或檢視表,並將數據列標示為使用該數據行刪除。
指定提供刪除狀態的數據行,索引器可以設定為移除任何刪除狀態設定為 true
的搜尋檔。 支援此行為的組態屬性是數據刪除偵測原則,其指定於數據源定義中,如下所示:
{
…,
"dataDeletionDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName" : "[a column name]",
"softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
}
}
softDeleteMarkerValue
必須是字串。 例如,如果您有一個整數數據行,其中已刪除的數據列會以值 1 標記,請使用 "1"
。 如果您有一個 BIT
數據行,其中已刪除的數據列會標示為布爾值 true 值,請使用字串常值 True
或 true
(案例並不重要)。