Azure AI 搜索中的索引器

Azure AI 中的索引器是一种爬网程序,它从云数据源提取文本数据,并使用源数据与搜索索引之间字段到字段的映射填充搜索索引。 由于不需要编写任何将数据添加到索引的代码,该搜索服务就能拉取数据,因此这种方法有时也称为“拉取模式”。

索引器还驱动 技能集执行和 AI 扩充,可在其中配置技能,以在内容路由到索引时对其进行额外处理。 一些示例包括图像文件的 OCR、用于数据分块的文本拆分技能、多种语言的文本翻译。

索引器面向支持的数据源。 索引器配置会指定数据源(源)和搜索索引(目标)。 Azure Blob 存储等源具有特定于该内容类型的其他配置属性。

可以按需运行索引器,也可以采用每 5 分钟运行一次的定期数据刷新计划来运行索引器。 要进行更频繁的更新,则需要采用“推送模式”,便于同时更新 Azure AI 搜索和外部数据源中的数据。

搜索服务为每个搜索单元运行一个索引器作业。 如果需要并发处理,请确保具有足够的副本。 索引器不会在后台运行,因此,如果服务承受较大压力,则可能会检测到比平常多的查询限制。

索引器场景和用例

可以将索引器用作数据引入的唯一方法,也可以将它与其他技术结合使用。 下表汇总了主要方案。

方案 策略
单个数据源 此模式是最简单的模式:一个数据源是搜索索引的唯一内容提供程序。 大多数受支持的数据源提供某种形式的更改检测,以便后续索引器运行在源中添加或更新了内容时发现差异。
多个数据源 索引器规范只能有一个数据源,但搜索索引本身可以接受来自多个源的内容,其中每个索引器运行都会引入来自不同数据提供程序的新内容。 每个源均构成完整文档的一部分,或填充每个文档中的选定字段。 有关此方案的详细说明,请参阅教程:来自多个数据源的索引
多个索引器 如果需要更改运行时参数、计划或字段映射,通常使用多个索引器与多个数据源配对。

Azure AI 搜索的跨区域横向扩展是另一种情况。 在不同区域中可能具有相同搜索索引的副本。 若要同步搜索索引内容,可从同一数据源中提取多个索引器,其中每个索引器在每个区域中都以不同的搜索索引为目标。

对超大型数据集进行并行索引还需要多索引器策略,其中每个索引器都以数据子集为目标。
内容转换 索引器可驱动 AI 扩充。 内容转换是在附加到索引器的技能集中定义的。

支持的数据源

索引器在 Azure 上抓取数据存储。

索引器接受平展行集,例如表或视图,或容器或文件夹中的项。 在大多数情况下,它为每个行、记录或项创建一个搜索文档。

索引阶段

在首次运行时,如果索引为空,索引器将读取表或容器中提供的所有数据。 在后续运行中,索引器通常可以只检测并检索已更改的数据。 对于 blob 数据,更改检测是自动进行的。 对于其他数据源(例如 Azure SQL 或 Azure Cosmos DB),必须启用更改检测。

对于它接收的每个文档,索引器将执行或协调多个步骤来编制索引,从文档检索到最终的搜索引擎“移交”。 索引器还可以驱动技能组执行和输出(假设定义了技能组)。

Diagram of indexer stages.

第 1 阶段:文档破解

文档破解是打开文件并提取内容的过程。 可以从服务上的文件、表中的行或容器或集合中的项提取基于文本的内容。 如果添加技能组和图像技能,文档破解还可以提取图像并让其排队等待图像处理。

索引器会根据数据源尝试不同的操作来提取潜在的可索引内容:

  • 当文档是包含嵌入图像的文件(如 PDF)时,索引器会提取文本、图像和元数据。 索引器可以从 Azure Blob 存储Azure Data Lake Storage Gen2SharePoint 打开文件。

  • 当文档是 Azure SQL 中的记录时,索引器会从每条记录的每个字段中提取非二进制内容。

  • 当文档是 Azure Cosmos DB 中的记录时,索引器会从 Azure Cosmos DB 文档的字段和子字段中提取非二进制内容。

第 2 阶段:字段映射

索引器提取源字段中的文本,并将其发送到索引或知识存储中的目标字段。 当字段名称和数据类型一致时,路径会被清除。 不过,如果希望输出中有不同的名称或类型,则需要告知索引器如何映射字段。

若要指定字段映射,请在索引器定义中输入源字段和目标字段。

当索引器从源文档读取时,字段映射需在文档破解后、转换之前进行。 在定义字段映射时,源字段的值将按原样发送到目标字段,而不进行任何修改。

第 3 阶段:技能组执行

技能组执行是一个可选步骤,它调用内置或自定义 AI 处理。 技能组可以添加光学字符识别 (OCR) 或其他形式的图像分析(如果内容是二进制文件)。 技能组还可以添加自然语言处理。 例如,可以添加文本翻译或关键短语提取。

无论是哪种转换,技能组执行都是扩充的途径。 如果索引器是管道,则可将技能组视为“管道内的管道”。

阶段 4:输出字段映射

如果包含技能组,则需要在索引器定义中指定输出字段映射。 技能组的输出在内部表现为称为“扩充文档”的树结构。 通过输出字段映射,可以选择此树中哪些部分要映射到索引中的字段。

尽管名称相似,但输出字段映射和字段映射会从不同源生成关联。 字段映射将源字段的内容与搜索索引中的目标字段相关联。 输出字段映射将内部扩充文档(技能输出)的内容与索引中的目标字段相关联。 对于应该位于索引中的任何已转换内容,输出字段映射是必需的,不同于被视为可选的字段映射。

下图显示了索引器不同阶段的示例索引器调试会话的表示形式:“文档破解”、“字段映射”、“技能组执行”和“输出字段映射”。

Screenshot of a sample debug session.

基本工作流

索引器可提供数据源独有的功能。 因此,索引器或数据源配置的某些方面会因索引器类型而不同。 但是,所有索引器的基本构成元素和要求都相同。 下面介绍所有索引器都适用的共同步骤。

步骤 1:创建数据源

索引器需要提供连接字符串的数据源对象和可能的凭据。 数据源是独立的对象。 多个索引器可以使用同一数据源对象一次加载多个索引。

可以使用以下任一方法创建数据源:

步骤 2:创建索引

索引器会自动执行某些与数据引入相关的任务,但通常不会自动创建索引。 必须有一个预定义的索引,其中包含外部数据源中的任何源字段的相应目标字段,这是先决条件。 字段需按名称和数据类型进行匹配。 如果不是,可以定义字段映射以建立关联。

有关详细信息,请参阅创建索引

步骤 3:创建和运行(或计划)索引器

索引器定义包含的属性可以独一无二地标识索引器、指定要使用的数据源和索引,并提供影响运行时行为的其他配置选项,其中包括索引器是按需运行还是按计划运行。

有关数据访问或技能组验证的任何错误或警告都将在索引器执行期间出现。 在索引器执行开始之前,依赖对象(例如数据源、索引和技能组)在搜索服务中处于被动状态。

有关详细信息,请参阅创建索引器

首次运行索引器后,可以按需重新运行它,也可以设置一个计划

可以通过门户获取索引器状态 API 监视索引器状态。 还应对索引运行查询,以验证结果是否符合预期。

索引器没有专用的处理资源。 基于此,索引器的状态可能会在运行前显示为空闲(取决于队列中的其他作业),并且运行时间可能无法预测。 其他因素也定义了索引器的性能,例如文档大小、文档复杂性、图像分析等。

后续步骤

现在你已了解索引器,下一步是查看索引器属性和参数、计划和索引器监视。 或者,可以返回到支持的数据源列表来获取有关特定源的详细信息。