來自適用於 MySQL 的 Azure 資料庫彈性伺服器的索引資料
重要
MySQL 支援目前處於公開預覽狀態,遵守補充條款。 您可以使用 2020-06-30-preview 或更新版本來編製內容的索引。 我們建議使用最新的預覽版 API。 目前不提供入口網站支援。
在本文中,了解如何設定索引子,以從適用於 MySQL 的 Azure DB 匯入內容,並在 Azure AI 搜尋服務中可供搜尋。 索引子的輸入是您在單一資料表或檢視表中的資料列。 輸出是搜尋索引,包含個別欄位中可搜尋的內容。
本文可補充建立索引子,其中包含從適用於 MySQL 的 Azure 資料庫彈性伺服器編製索引的特定資訊。 其中使用 REST API 來示範所有索引子通用的三部分工作流程:建立資料來源、建立索引、建立索引子。 提交建立索引子要求時會擷取資料。
當設定包含上限和虛刪除時,索引子會包含 MySQL 資料庫的所有變更、上傳和刪除。 這些變更將會反映在搜尋索引中。 提交建立索引子要求時會擷取資料。
必要條件
註冊取得預覽版以提供案例意見反應。 您可以在表單提交之後自動存取此功能。
適用於 MySQL 的 Azure 資料庫彈性伺服器和範例資料。 資料必須位於資料表或檢視中。 需要主索引鍵。 若您使用檢視,則必須有上限標準資料行。
讀取權限。 「完整存取」連接字串包含授權存取內容所需的金鑰,但如果您使用 Azure 角色,請確定搜尋服務受控識別具有 MySQL 上的「讀取者」權限。
用來建立資料源、索引和索引子的 REST 用戶端。
您也可以使用適用於 .NET 的 Azure SDK。 入口網站無法用於建立索引子,但您可以在建立索引子後管理索引子和資料來源。
預覽限制
目前,如果所有資料列的日期或時間戳記一致,則無法使用變更追蹤和刪除偵測。 這項限制是預覽版更新中預計會解決的已知問題。 在解決此問題之前,請勿將技能集新增至 MySQL 索引子。
預覽不支援幾何類型和 Blob。
如上所述,入口網站不支援建立索引子,但建立之後,就可以在入口網站中管理 MySQL 索引子和資料來源。 例如,您可以編輯定義,並重設、執行或排程索引子。
定義資料來源
資料來源定義指定要編製索引的資料、認證,以及用於識別資料變更的原則。 資料來源會被定義為獨立的資源,因此可供多個索引子使用。
建立或更新資料來源會指定定義。 建立資料來源時,請務必使用預覽 REST API。
{
"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 連接字串。 您可以在 Azure 入口網站中,從 MySQL 的 [連接字串] 頁面找到連接字串。將
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=2024-05-01-preview
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
(不區分大小寫)。