Azure Search结合Blob Storage实现图片及PDF内嵌图片内容搜索的技术问询
解决Azure Blob存储中图片(含PDF内嵌图片)的内容搜索问题
我来帮你梳理下如何实现Blob存储里图片(包括PDF内嵌图片)的内容搜索——毕竟Blob本身确实不支持直接提取图片内容,得结合Azure Cognitive Search的能力来搞定:
核心思路
Azure Blob存储仅负责文件存储,没法直接做图片内容的OCR提取。我们需要用Azure Cognitive Search + 计算机视觉OCR技能的组合:让Search的索引器读取Blob里的文件,对图片(含PDF内嵌图)执行OCR,把提取出的文本存入搜索索引,之后就能实现全文搜索了。
具体配置步骤
1. 准备基础资源
- 确保你已拥有Azure Blob存储(用于存放PDF/XML/文本/图片等所有文件)
- 创建Azure Cognitive Search资源,同时关联Azure Computer Vision资源(OCR技能需要调用它的API来完成图片文本提取)
2. 配置Blob数据源
在Cognitive Search中创建指向Blob存储容器的数据源,选择合适的身份验证方式(比如托管身份或连接字符串),确保Search服务有权限访问你的Blob文件。
3. 创建包含OCR的技能集
技能集是处理文件内容的“流水线”,我们需要添加两个关键技能:
- OCR技能:专门提取图片(含PDF内嵌图)的文本内容
- 合并技能:把文件原生文本(比如PDF里的文字、XML/文本文件内容)和OCR提取的图片文本合并到一个字段,方便后续统一搜索
以下是简化的技能集JSON示例:
{ "skills": [ { "@odata.type": "#Microsoft.Skills.Vision.OcrSkill", "context": "/document", "defaultLanguageCode": "en", // 根据你的文件语言调整,比如"zh-Hans" "detectOrientation": true, // 自动检测图片方向,提升OCR准确率 "inputs": [ { "name": "image", "source": "/document/normalized_images/*" // 指向索引器生成的标准化图片 } ], "outputs": [ { "name": "text", "targetName": "imageText" // OCR结果存入这个临时字段 } ] }, { "@odata.type": "#Microsoft.Skills.Text.MergeSkill", "context": "/document", "inputs": [ { "name": "text", "source": "/document/content" // 文件自身的原生文本 }, { "name": "text", "source": "/document/imageText" // OCR提取的图片文本 } ], "outputs": [ { "name": "mergedText", "targetName": "mergedContent" // 合并后的文本字段,用于搜索 } ] } ] }
4. 创建搜索索引
定义索引字段,至少包含一个可搜索的文本字段(比如上面的mergedContent),用来存储合并后的原生文本和OCR结果,同时可以根据需求添加其他元数据字段(比如文件名、文件类型)。
5. 配置索引器触发处理
索引器是连接数据源、技能集和索引的核心,关键配置要注意:
- 设置
parsingMode: "default":支持处理PDF/XML/文本/图片等多种文件类型 - 设置
imageAction: "generateNormalizedImages":让索引器自动提取PDF里的内嵌图片,并生成标准化的图片供OCR技能处理 - 设置
dataToExtract: "contentAndMetadata":提取文件的内容和元数据信息
示例索引器配置片段:
{ "name": "blob-file-indexer", "dataSourceName": "your-blob-datasource", "targetIndexName": "your-search-index", "skillsetName": "your-skillset", "parameters": { "configuration": { "parsingMode": "default", "imageAction": "generateNormalizedImages", "dataToExtract": "contentAndMetadata" } } }
关于AzureSearch_SkipContent的用法
你提到的AzureSearch_SkipContent是Blob文件的元数据属性,具体作用是:
- 如果给某个文件添加元数据
AzureSearch_SkipContent: true,索引器会跳过提取该文件的原生文本内容,只处理图片的OCR结果 - 适用场景:比如你只关心PDF里的内嵌图片内容,不需要PDF本身的文字,就可以给这类PDF文件添加该元数据
覆盖你提到的所有文件类型
这套方案完全支持你列出的文件类型:
- XML/文本文件:索引器直接提取原生文本,无需OCR
- PNG/JPEG图片:索引器自动触发OCR提取内容
- PDF:既提取原生文本,又提取内嵌图片的OCR内容(前提是配置了
imageAction)
内容的提问来源于stack exchange,提问作者Kokirala Sudheer
相关产品推荐
相关产品推荐

