共用方式為


來自適用於 MySQL 的 Azure 資料庫彈性伺服器的索引資料

重要

MySQL 支援目前處於公開預覽狀態,遵守補充條款。 您可以使用 2020-06-30-preview 或更新版本來編製內容的索引。 我們建議使用最新的預覽版 API。 目前不提供入口網站支援。

在本文中,了解如何設定索引子,以從適用於 MySQL 的 Azure DB 匯入內容,並在 Azure AI 搜尋服務中可供搜尋。 索引子的輸入是您在單一資料表或檢視表中的資料列。 輸出是搜尋索引,包含個別欄位中可搜尋的內容。

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

當設定包含上限和虛刪除時,索引子會包含 MySQL 資料庫的所有變更、上傳和刪除。 這些變更將會反映在搜尋索引中。 提交建立索引子要求時會擷取資料。

必要條件

預覽限制

目前,如果所有資料列的日期或時間戳記一致,則無法使用變更追蹤和刪除偵測。 這項限制是預覽版更新中預計會解決的已知問題。 在解決此問題之前,請勿將技能集新增至 MySQL 索引子。

預覽不支援幾何類型和 Blob。

如前所述,索引器建立沒有入口網站支援,但是一旦存在,就可以在 Azure 入口網站 中管理 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、、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=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

索引子的變更偵測原則會依靠上限資料行來擷取資料列版本,或資料列上次更新的日期和時間。 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 提取內容的索引子: