你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

为来自 Azure Database for MySQL 灵活服务器(预览版)的数据编制索引

注意

Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。

重要

标记为“预览”的特性、功能或属性不受服务级别协议 (SLA) 保障,不建议用于生产工作负载,并且在正式发布之前可能会更改或受到限制。 Azure AI 搜索预览条款适用于所有预览功能,无论是独立功能还是正式版功能的一部分。

重要

这些特性和功能支持与其他Microsoft 服务和第三方服务的连接。 使用这些服务受其各自的条款的约束,可能会导致数据处理或存储超出Azure符合性边界,以及流入Azure符合性边界的数据。

您有责任管理您的数据是否会流出您组织的合规和地理边界之外及其任何相关影响,并确保已配置适当的权限、边界和审批。

你负责仔细查看和测试在特定用例上下文中生成的应用程序,并做出所有适当的决策和自定义。 这包括实施自己的负责任的 AI 缓解措施,例如元系统、内容筛选器或其他安全系统,并确保应用程序满足适当的质量、可靠性、安全性和可信度标准。 有关详细信息,请参阅 Azure AI 搜索 透明度说明。

Azure Database for MySQL索引器(预览版)将内容从 Azure Database for MySQL 灵活服务器导入Azure AI 搜索索引。 索引器的输入是单个表或视图中的行。 输出是一个搜索索引,其中包含单个字段中的可搜索内容。

本文对创建索引器进行了补充,包含专门针对 Azure Database for MySQL 灵活服务器编制索引的信息。 它使用 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 Connection 字符串页上找到连接字符串。

  • 将 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、tinytextmediumtext、text、longtext、enum、、 settime Edm.String
无符号数值数据、serial、decimal、dec、bit、blob、binary、geometry 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=2026-08-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 数据源定义中设置属性。 此属性告知索引器对数据使用了哪些更改跟踪机制。

对于Azure Database for MySQL索引器,唯一受支持的策略是 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(不区分大小写)。

后续步骤

现在可以 运行索引器、 监视状态或 计划索引器执行。 以下文章适用于从 Azure MySQL 拉取内容的索引器: