如何在Azure AI Search中用SplitSkill按页面拆分PDF文档?
解决Azure AI Search中SplitSkill无法按页码拆分PDF并显示页码的问题
核心问题原因
你当前使用/document/mergedText作为SplitSkill的输入源,这个字段是将整个PDF的所有页面文本合并后的结果,已经丢失了原生的分页边界和页码信息,所以即便设置textSplitMode: pages也无法按原文档页码拆分。
具体修复步骤
1. 调整SplitSkill的输入源与上下文
将技能集的输入源从合并文本改为单个页面的内容,同时把上下文切换到每个页面层级,确保拆分操作与原页码绑定:
修正后的技能集JSON:
{ "@odata.type": "#Microsoft.Skills.Text.SplitSkill", "name": "#2", "description": "Split skill to chunk documents by page", "context": "/document/pages/*", "defaultLanguageCode": "en", "textSplitMode": "pages", "inputs": [ { "name": "text", "source": "/document/pages/*/content" } ], "outputs": [ { "name": "textItems", "targetName": "pageChunks" } ] }
2. 配置索引字段存储页码
在你的Azure AI Search索引中添加一个pageNumber字段,类型设为Edm.Int32,用于存储每个拆分块对应的原文档页码。
3. 确保索引器提取分页元数据
在索引器的配置中,设置dataToExtract: contentAndMetadata,确保系统能从PDF中提取每个页面的pageNumber元数据:
{ "name": "your-indexer-name", "dataSourceName": "your-datasource-name", "targetIndexName": "your-index-name", "skillsetName": "your-skillset-name", "configuration": { "dataToExtract": "contentAndMetadata", "parsingMode": "default" }, "fieldMappings": [ { "sourceFieldName": "/document/pages/*/pageNumber", "targetFieldName": "pageNumber" } ] }
4. 关联拆分块与页码
在技能集的输出映射中,确保每个拆分后的文本块(pageChunks)与对应的pageNumber绑定,这样在索引时每个搜索条目都会携带原文档的页码信息。
搜索结果中显示页码
当你执行搜索查询时,只需在select参数中指定返回pageNumber字段,即可在结果中看到答案对应的原文档页码。例如:
POST /indexes/your-index-name/docs/search?api-version=2023-11-01 { "search": "your-query", "select": "pageNumber, content, other-fields" }
内容的提问来源于stack exchange,提问作者alice
相关产品推荐
相关产品推荐

