你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure AI 搜索中的索引器
Azure AI 中的索引器是一种爬网程序,它从云数据源提取文本数据,并使用源数据与搜索索引之间字段到字段的映射填充搜索索引。 由于不需要编写任何将数据添加到索引的代码,该搜索服务就能拉取数据,因此这种方法有时也称为“拉取模式”。
索引器还驱动 技能集执行和 AI 扩充,可在其中配置技能,以在内容路由到索引时对其进行额外处理。 一些示例包括,图像文件的 OCR、用于数据分块的文本分割技能,以及调用嵌入模型生成向量以进行向量搜索。
索引器面向支持的数据源。 索引器配置会指定数据源(源)和搜索索引(目标)。 Azure Blob 存储等源具有特定于该内容类型的其他索引器配置属性。
可以按需运行索引器,也可以采用每 5 分钟运行一次的定期数据刷新计划来运行索引器。 更频繁的更新排除了索引器的使用,这就要求你实施一个“推送模型”,同时向 Azure AI Search 和外部数据源推送数据,以实现数据同步。
搜索服务为每个搜索单元运行一个索引器作业。 如果需要并发处理,请确保具有足够的副本。 索引器不会在后台运行,因此,如果服务承受较大压力,则可能会检测到比平常多的查询限制。
索引器场景和用例
可以将索引器用作数据引入的唯一方法,也可以将它与其他技术结合使用。 下表汇总了主要方案。
方案 | 策略 |
---|---|
单个数据源 | 此模式是最简单的模式:一个数据源是搜索索引的唯一内容提供程序。 大多数受支持的数据源提供某种形式的更改检测,以便后续索引器运行在源中添加或更新了内容时发现差异。 |
多个数据源 | 索引器规范只能有一个数据源,但搜索索引本身可以接受来自多个源的内容,其中每个索引器作业都会引入来自不同数据提供程序的新内容。 每个源均构成完整文档的一部分,或填充每个文档中的选定字段。 有关此方案的详细说明,请参阅教程:来自多个数据源的索引。 |
多个索引器 | 如果需要更改运行时参数、计划或字段映射,通常使用多个索引器与多个数据源配对。 Azure AI Search 的跨区域扩展就是这种情况的一种变体。 在不同区域中可能具有相同搜索索引的副本。 若要同步搜索索引内容,可从同一数据源中拉取多个索引器,其中每个区域中的每个索引器都以不同的搜索索引为目标。对超大型数据集进行 并行索引还需要多索引器策略,其中每个索引器以数据的子集为目标。 |
内容转换 | 索引器将推动技能组执行和 AI 扩充。 内容转换是在附加到索引器的技能集中定义的。 你可以使用技能来整合数据分块和矢量化功能。 |
应该计划为每个目标索引和数据源组合创建一个索引器。 可以将多个索引器编写到同一索引中,也可以针对多个索引器重复使用同一数据源。 但是,一个索引器一次只能使用一个数据源,并且只能写入到单个索引。 如下图所示,一个数据源为一个索引器提供输入,然后填充单个索引:
尽管你一次只能使用一个索引器,但是可以在不同的组合中使用资源。 下图的主要内容要注意的是,一个数据源可与多个索引器配对,多个索引器可以写入到相同的索引。
支持的数据源
索引器在 Azure 上和 Azure 外部抓取数据存储。
- Azure Blob 存储
- Azure Cosmos DB
- Azure Data Lake Storage Gen2
- Azure SQL 数据库
- Azure 表存储
- Azure SQL 托管实例
- Azure 虚拟机中的 SQL Server
- Azure 文件存储(预览版)
- Azure MySQL(预览版)
- Microsoft 365 中的 SharePoint(预览版)
- Azure Cosmos DB for MongoDB(预览版)
- Azure Cosmos DB for Apache Gremlin(预览版)
不支持 Azure Cosmos DB for Cassandra。
索引器接受平展行集,例如表或视图,或容器或文件夹中的项。 在大多数情况下,它为每个行、记录或项创建一个搜索文档。
使用共享专用链接时,可以使用标准 Internet 连接(公共)或加密的专用连接建立到远程数据源的索引器连接。 还可以建立使用托管标识进行身份验证的连接。 有关安全连接的详细信息,请参阅对受 Azure 网络安全功能保护的内容进行索引器访问和使用托管标识连接到数据源。
索引阶段
在首次运行时,如果索引为空,索引器将读取表或容器中提供的所有数据。 在后续运行中,索引器通常可以只检测并检索已更改的数据。 对于 blob 数据,更改检测是自动进行的。 对于其他数据源(例如 Azure SQL 或 Azure Cosmos DB),必须启用更改检测。
对于它接收的每个文档,索引器将执行或协调多个步骤来编制索引,从文档检索到最终的搜索引擎“移交”。 索引器还可以驱动技能组执行和输出(假设定义了技能组)。
第 1 阶段:文档破解
文档破解是打开文件并提取内容的过程。 可以从服务上的文件、表中的行或容器或集合中的项提取基于文本的内容。 如果添加技能组和图像技能,文档破解还可以提取图像并让其排队等待图像处理。
索引器会根据数据源尝试不同的操作来提取潜在的可索引内容:
当文档是包含嵌入图像的文件(如 PDF)时,索引器会提取文本、图像和元数据。 索引器可以从 Azure Blob 存储、Azure Data Lake Storage Gen2 和 SharePoint 打开文件。
当文档是 Azure SQL 中的记录时,索引器会从每条记录的每个字段中提取非二进制内容。
当文档是 Azure Cosmos DB 中的记录时,索引器会从 Azure Cosmos DB 文档的字段和子字段中提取非二进制内容。
第 2 阶段:字段映射
索引器提取源字段中的文本,并将其发送到索引或知识存储中的目标字段。 当字段名称和数据类型一致时,路径会被清除。 不过,如果希望输出中有不同的名称或类型,则需要告知索引器如何映射字段。
若要指定字段映射,请在索引器定义中输入源字段和目标字段。
当索引器从源文档读取时,字段映射需在文档破解后、转换之前进行。 在定义字段映射时,源字段的值将按原样发送到目标字段,而不进行任何修改。
第 3 阶段:技能组执行
技能组执行是一个可选步骤,它调用内置或自定义 AI 处理。 技能组可以添加光学字符识别 (OCR) 或其他形式的图像分析(如果内容是二进制文件)。 技能组还可以添加自然语言处理。 例如,可以添加文本翻译或关键短语提取。
无论是哪种转换,技能组执行都是扩充的途径。 如果索引器是管道,则可将技能组视为“管道内的管道”。
阶段 4:输出字段映射
如果包含技能组,则需要在索引器定义中指定输出字段映射。 技能组的输出在内部表现为称为“扩充文档”的树结构。 通过输出字段映射,可以选择此树中哪些部分要映射到索引中的字段。
尽管名称相似,但输出字段映射和字段映射会从不同源生成关联。 字段映射将源字段的内容与搜索索引中的目标字段相关联。 输出字段映射将内部扩充文档(技能输出)的内容与索引中的目标字段相关联。 对于应该位于索引中的任何已转换内容,输出字段映射是必需的,不同于被视为可选的字段映射。
下图显示了索引器不同阶段的示例索引器调试会话的表示形式:“文档破解”、“字段映射”、“技能组执行”和“输出字段映射”。
基本工作流
索引器可提供数据源独有的功能。 因此,索引器或数据源配置的某些方面会因索引器类型而不同。 但是,所有索引器的基本构成元素和要求都相同。 下面介绍所有索引器都适用的共同步骤。
步骤 1:创建数据源
索引器需要提供连接字符串的数据源对象和可能的凭据。 数据源是独立的对象。 多个索引器可以使用同一数据源对象一次加载多个索引。
可以使用以下任一方法创建数据源:
- 使用 Azure 门户,在搜索服务页的“数据源”选项卡上选择“添加数据源”,以指定数据源定义。
- 使用 Azure 门户时,导入数据向导会输出数据源。
- 使用 REST API 来调用创建数据源。
- 使用 Azure SDK for .NET 来调用 SearchIndexerDataSourceConnection 类
步骤 2:创建索引
索引器会自动执行某些与数据引入相关的任务,但通常不会自动创建索引。 必须有一个预定义的索引,其中包含外部数据源中的任何源字段的相应目标字段,这是先决条件。 字段需按名称和数据类型进行匹配。 如果不是,可以定义字段映射以建立关联。
有关详细信息,请参阅创建索引。
步骤 3:创建和运行(或计划)索引器
索引器定义包含的属性可以独一无二地标识索引器、指定要使用的数据源和索引,并提供影响运行时行为的其他配置选项,其中包括索引器是按需运行还是按计划运行。
有关数据访问或技能组验证的任何错误或警告都将在索引器执行期间出现。 在索引器执行开始之前,依赖对象(例如数据源、索引和技能组)在搜索服务中处于被动状态。
有关详细信息,请参阅创建索引器
可以通过 Azure 门户或获取索引器状态 API 监视索引器状态。 还应对索引运行查询,以验证结果是否符合预期。
索引器没有专用的处理资源。 基于此,索引器的状态可能会在运行前显示为空闲(取决于队列中的其他作业),并且运行时间可能无法预测。 其他因素也定义了索引器的性能,例如文档大小、文档复杂性、图像分析等。
后续步骤
现在你已了解索引器,下一步是查看索引器属性和参数、计划和索引器监视。 或者,可以返回到支持的数据源列表来获取有关特定源的详细信息。