对 Azure Blob 存储内容进行搜索

在 Azure Blob 存储中存储的各种内容类型中搜索可能是一个难以解决的问题,但 Azure 认知搜索在内容层提供深度集成,提取和推断文本信息,然后可以在搜索索引中查询这些信息。

本文介绍用于从 Blob 中提取内容和元数据并将其发送到 Azure 认知搜索中的搜索索引的基本工作流。 可以使用全文搜索查询生成的索引。 此外,对于非搜索场景,也可以选择将已处理的 blob 内容发送到知识存储

注意

已熟悉工作流和组合? 下一步介绍配置 Blob 索引器

将全文搜索添加到 Blob 数据意味着什么

Azure 认知搜索是一项独立的搜索服务,支持通过用户定义的索引编制索引和查询工作负载,这些索引包含托管在云中的远程可搜索内容。 为了提高性能,需将可搜索内容与查询引擎共置在一起,使返回结果的速度与用户预期的搜索查询速度相当。

认知搜索在索引层与 Azure Blob 存储集成,可将 Blob 内容作为已编制成倒排索引的搜索文档导入,并可导入其他支持自由格式文本查询和筛选表达式的查询结构。 由于 Blob 内容已索引到搜索索引中,因此可以使用 Azure 认知搜索中的所有查询功能来查找 Blob 内容中的信息。

输入是 Azure Blob 存储的单个容器中的 Blob。 Blob 几乎可以是任何类型的文本数据。 如果 blob 包含图像,可以添加 AI 扩充功能以便通过图像创建和提取文本。

输出始终是 Azure 认知搜索索引,用于在客户端应用程序中快速执行搜索、检索和浏览。 输入与输出之间是索引管道体系结构本身。 该管道基于本文将会详细介绍的索引器功能。

创建并填充索引后,该索引将独立于 blob 容器而存在,但你可以重新运行索引操作以基于更改的文档刷新索引。 各个 Blob 中的时间戳信息用于执行更改检测。 可以选择按计划执行或按需索引作为刷新机制。

Blob 搜索解决方案中使用的资源

你需要 Azure 认知搜索、Azure Blob 存储和一个客户端。 通常,认知搜索是解决方案中的几个组件之一,应用程序代码会在其中发出查询 API 请求并处理响应。 还可以编写应用程序代码来处理索引,但对于概念证明测试和即席任务,通常使用 Azure 门户作为搜索客户端。

在 Blob 存储中,需要一个提供源内容的容器。 可以设置文件的包含和排除条件,并指定要在认知搜索中为 Blob 的哪些部分编制索引。

可以直接在存储帐户门户页中开始操作。

  1. 在“数据管理”下的左侧导航页中,选择“Azure 搜索”以选择或创建搜索服务。

  2. 按照向导中的步骤从 Blob 中提取和(可选)创建可搜索的内容。 工作流是“导入数据”向导

    屏幕截图显示 Azure 存储门户页中的 Azure 搜索向导。

  3. 使用搜索门户页中的搜索浏览器来查询你的内容。

向导是最好的起点,但当你自己配置 blob 索引器时,你会发现更灵活的选项。 可以使用 Postman 之类的工具调用 REST API。 教程:在 Azure 认知搜索中索引和搜索半结构化数据 (JSON blob) 指导你完成在 Postman 中调用 REST API 的步骤。

blob 的索引编制方式

默认情况下,将大多数 Blob 作为索引中的单个搜索文档编制索引,包括包含结构化内容的 Blob(例如 JSON 或 CSV),它们作为单个文本区块编制索引。 但是,对于包含内部结构(分隔符)的 JSON 或 CSV 文档,则可以分配分析模式,以便为每个行或元素生成单独的搜索文档:

复合或嵌入式文档(例如 ZIP 存档、嵌入了带附件 Outlook 电子邮件的 Word 文档或带附件的 .MSG 文件)也以单一文档的形式编制索引。 例如,从 .MSG 文件的附件中提取的所有图像将在 normalized_images 字段中返回。 如果有图像,请考虑添加 AI 扩充,以从该内容中获取更多搜索实用工具。

文档的文本内容将提取到名为 "content" 的字符串字段中。 还可以提取标准和用户定义的元数据。

注意

Azure 认知搜索会根据定价层对其提取的文本量施加索引器限制。 如果文档被截断,索引器状态响应中将显示警告。

使用 Blob 索引器进行内容提取

索引器是认知搜索中的数据源感知型子服务,其中配备的内部逻辑可用于对数据采样、读取元数据、检索数据,以及将数据从本机格式序列化为 JSON 文档供以后导入。

Azure 存储中的 Blob 使用 Blob 索引器编制索引。 可以使用 Azure 存储中的“Azure search”命令、“导入数据”向导、REST API 或 .NET SDK 来调用此索引器。 在代码中,使用此索引器的方式是设置类型,并提供包括 Azure 存储帐户和 Blob 容器的连接信息。 可以通过创建虚拟目录(随后可将其作为参数传递),或者筛选文件类型扩展名,来指定 Blob 的子集。

索引器破解文档,会打开一个 Blob 来检查内容。 这是连接到数据源后,在管道中发生的第一个步骤。 对于 Blob 数据,此步骤会检测 PDF、Office 文档和其他内容类型。 文档破解和文本提取是免费的。 如果 Blob 包含图像内容,则除非添加 AI 扩充,否则会忽略图像。 标准索引仅适用于文本内容。

Blob 索引器附带配置参数,如果基础数据提供足够的信息,则索引器支持更改跟踪。 可以在 Blob 索引器中了解有关核心功能的详细信息。

支持的访问层

Blob 存储访问层包括热、冷、存档访问层。 索引器只能访问热访问层和冷访问层。

支持的内容类型

通过对容器运行 Blob 索引器,只需运行单个查询就能从以下内容类型中提取文本和元数据:

控制要为哪些 Blob 编制索引

你可以通过 blob 的文件类型或在 blob 上设置属性(导致索引器跳过它们)控制要对哪些 blob 编制索引以及要跳过哪些 blob。

通过将 "indexedFileNameExtensions" 设置为文件扩展名(包括前置句点)逗号分隔列表来包含特定的文件扩展名。 通过将 "excludedFileNameExtensions" 设置为应跳过的扩展名来排除特定的文件扩展名。 如果这两个列表中存在同一个扩展名,将从索引编制中排除该扩展名。

PUT /indexers/[indexer name]?api-version=2020-06-30
{
    "parameters" : { 
        "configuration" : { 
            "indexedFileNameExtensions" : ".pdf, .docx",
            "excludedFileNameExtensions" : ".png, .jpeg" 
        } 
    }
}

在 blob 中添加“跳过”元数据

索引器配置参数适用于容器或文件夹中的所有 blob。 有时,你需要控制为单个 blob 编制索引的方式。

将以下元数据属性和值添加到 blob 存储中的 blob。 当索引器遇到此属性时,它将在编制索引运行过程中跳过相应 Blob 或其内容。

属性名称 属性值 说明
“AzureSearch_Skip” "true" 指示 Blob 索引器完全跳过该 Blob, 既不尝试提取元数据,也不提取内容。 如果特定的 Blob 反复失败并且中断编制索引过程,此属性非常有用。
“AzureSearch_SkipContent” "true" 此属性等效于上面所述的与特定 Blob 相关的 "dataToExtract" : "allMetadata" 设置。

为 Blob 元数据编制索引

用于实现在任何内容类型的 blob 中轻松进行排序的一个常用方案是为自定义元数据和每个 blob 的系统属性编制索引。 通过这种方式,系统会对所有 Blob 的信息编制索引(无论文档类型是什么),并将信息存储在搜索服务中的索引内。 然后,可以使用新索引对所有 Blob 存储内容继续执行排序、筛选和分面操作。

注意

Blob 存储服务会编制 Blob 索引标记的本机索引,并将其公开以用于查询。 如果 blob 的键/值属性需要索引和筛选功能,应利用 Blob 索引标记,而不是元数据。

在搜索索引中搜索 Blob 内容

索引器的输出是一个搜索索引,用于在客户端应用中通过自由文本和筛选的查询进行交互式浏览。 若要对内容进行初始浏览和验证,我们建议从门户中的搜索资源管理器开始,以检查文档结构。 在搜索浏览器中,可以使用:

更持久的解决方案是收集查询输入,并在客户端应用程序中以搜索结果的形式提供响应。 以下 C# 教程介绍了如何生成搜索应用程序:在 Azure 认知搜索中创建第一个应用程序

后续步骤