如何将企业关联多Blob内容合并为单个Azure Search记录?
这个一对多的关联合并场景确实比一对一要复杂些,但Azure Search其实有现成的方案能搞定,我给你拆解下具体实现思路和步骤:
核心解决思路:Azure Search索引器+技能集实现主实体与多文档的内容合并
本质是把CosmosDB里的企业作为主索引实体,将其关联的所有Blob文档内容提取后合并到同一个索引字段中,最终实现跨数据源的全文搜索。
1. 先做好数据源的关联标识准备
首先得确保两个数据源能精准关联:
- CosmosDB中的企业文档必须有一个唯一的标识字段(比如
companyId),作为关联的主键。 - Blob存储里的每个文档,要么在Blob元数据中添加
companyId字段,要么采用包含该标识的命名规则(比如{companyId}_contract.pdf),让索引器能识别哪些文档属于哪家企业。
2. 两种实现方案,按需选择
方案一:纯内置技能实现(零代码)
适合不需要自定义合并逻辑的场景,靠Azure Search的内置技能串起流程:
- 第一步:创建CosmosDB索引器作为主数据源,同时将Blob存储添加为辅助数据源,通过索引器配置指定两个数据源的关联字段(比如用
companyId做匹配)。 - 第二步:构建技能集,先用
Shaper技能将每个Blob提取出的文本内容与对应的companyId绑定;再用MergeSkill按companyId分组,把同一企业下的所有文档内容拼接成一个完整字符串。 - 第三步:在索引字段映射中,将合并后的字符串关联到Azure Search索引的
content字段。 - 小提示:调整索引器的
batchSize参数,确保能批量处理同一企业的多份文档,避免遗漏。
方案二:自定义Web技能(适合复杂合并逻辑)
如果需要过滤特定文档、给不同类型文档添加前缀标注等自定义操作,可以写一个轻量Web API作为自定义技能:
- API逻辑很简单:接收包含
companyId和文档文本的批量输入,按companyId分组后拼接内容(比如给PDF文档加[PDF]前缀,Word文档加[DOCX]前缀)。 - 在Azure Search技能集中配置调用这个自定义API,将返回的合并内容写入索引的
content字段。
3. 索引与索引器的关键配置细节
- 确保Azure Search索引的
content字段设置为Searchable和Retrievable,既支持全文搜索,也能返回合并后的内容。 - 开启Blob索引器的文档自动解析功能(默认开启),Azure Search会自动提取.docx、.pdf里的文本内容,不需要自己处理格式解析。
- 开启增量索引,只处理新增或修改的企业文档与Blob,提升同步效率。
4. 测试验证步骤
- 先拿单家企业的2-3份文档做测试,查看Azure Search索引中该企业的
content字段是否正确合并了所有文档内容。 - 用Azure Search的测试查询功能,搜索文档中的关键词,验证是否能精准关联到对应的企业数据。
内容的提问来源于stack exchange,提问作者Sadiq Khoja
相关产品推荐
相关产品推荐

