共用方式為


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

重要

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

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

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

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

必要條件

預覽限制

目前,如果所有資料列的日期或時間戳記一致,則無法使用變更追蹤和刪除偵測。 這項限制是預覽版更新中預計會解決的已知問題。 在解決此問題之前,請勿將技能集新增至 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
tinyintsmallintmediumintintintegeryear Edm.Int32、Edm.Int64、Edm.String
bigint Edm.Int64、Edm.String
floatdoublereal Edm.Double、Edm.String
datedatetimetimestamp 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
}

重點︰

檢查索引子狀態

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

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 提取內容的索引子: