從 適用於 MySQL 的 Azure 資料庫 彈性伺服器編製數據索引

重要

MySQL 支援目前處於公開預覽狀態,以 補充使用規定。 使用預覽 REST API(2020-06-30-preview 或更新版本)編製內容索引。 目前沒有入口網站支援。

在本文中,瞭解如何設定索引器,以從 適用於 MySQL 的 Azure 資料庫 匯入內容,並在 Azure AI 搜尋服務中加以搜尋。 索引器輸入是您在單一數據表或檢視表中的資料列。 輸出是具有個別欄位中可搜尋內容的搜尋索引。

本文補充建立索引器,其中包含從 適用於 MySQL 的 Azure 資料庫 彈性伺服器編製索引的特定資訊。 其中使用 REST API 來示範所有索引子通用的三部分工作流程:建立資料來源、建立索引、建立索引子。 提交建立索引子要求時會擷取資料。

設定為包含高水印和虛刪除時,索引器會針對 MySQL 資料庫採取所有變更、上傳和刪除。 它會反映搜尋索引中的這些變更。 提交建立索引子要求時會擷取資料。

必要條件

預覽限制

目前,如果所有數據列的日期或時間戳統一,變更追蹤和刪除偵測將無法運作。 這項限制是預覽更新中要解決的已知問題。 在解決此問題之前,請勿將技能集新增至 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、、smallintmediumintint、、integeryear Edm.Int32、Edm.Int64、Edm.String
bigint Edm.Int64、Edm.String
float、 、 doublereal Edm.Double、Edm.String
date、 、 datetimetimestamp Edm.DateTimeOffset、Edm.String
charvarchartinytextmediumtexttextlongtextenumsettime 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
}

重點︰

檢查索引子狀態

傳送取得 索引器狀態 要求以監視索引器執行:

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

索引器變更偵測原則依賴高 浮水印 數據行來擷取數據列版本,或上次更新數據列的日期和時間。 其數據粒度通常為 DATEDATETIMETIMESTAMP 數據行,足以符合高水位標記數據行的需求。

在您的 MySQL 資料庫中,高水印數據行必須符合下列需求:

  • 所有數據插入都必須指定數據行的值。
  • 專案的所有更新也會變更數據行的值。
  • 此數據行的值會隨著每個插入或更新而增加。
  • 您可以有效率地執行具有下列 WHEREORDER 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 值,請使用字串常值 Truetrue (案例並不重要)。

下一步

您現在可以 執行索引器監視狀態排程索引器執行。 下列文章適用於從 Azure MySQL 提取內容的索引器: