Azure Cognitive Search索引能否使用查询引用对照表?
Azure Cognitive Search 引用字典表需求解答
首先明确:Azure Cognitive Search 没有原生支持查询阶段关联外部引用表/字典表的配置,不存在类似关系型数据库的JOIN能力,所有要用于搜索、筛选、分面的字段值必须直接存储在索引文档中,或在查询前后由你自行做转换。你无需将全量字典表合并到索引,可根据场景选择以下实现方案:
方案1:索引导入阶段自动映射(无需提前合并表,不存储全量字典)
适合字典表更新频率不高的场景,仅需把编码对应的字面量写入索引,不会存储全量字典表内容:
- 首先将你的字典表存储到Azure Cognitive Search索引器支持的数据源中,可选类型包括Azure SQL、Azure Table Storage、Blob存储中的CSV文件等
- 在现有索引的字段定义中新增对应编码字段的字面量字段,按需配置可搜索/可筛选/可分面/可排序属性
- 在现有索引器关联的技能集中添加
Microsoft.Skills.Util.LookupSkill(查找技能),配置当前索引源表的编码字段为匹配输入,绑定字典表数据源、字典表中的编码匹配键、要返回的字面量字段为输出 - 重新运行索引器即可:导入阶段会自动完成编码到字面量的匹配映射,仅最终需要的字面量值会写入索引,全量字典表不会被导入到搜索索引中
方案2:查询前后客户端映射(完全无需修改现有索引)
适合字典表更新频繁,不想频繁重跑索引的场景:
- 索引中仍然仅存储编码值,无需新增字段
- 用户输入搜索词后,你先在业务层查询字典表,匹配出搜索词对应的所有编码值
- 把匹配到的编码值作为搜索/筛选条件传给Azure Cognitive Search执行查询
- 拿到搜索返回结果后,再在业务层把结果中的编码批量替换为对应的字面量返回给前端即可
- 注意该方案需要你的字典表查询延迟足够低,避免影响整体搜索接口的响应速度
方案3:反规范化合并到源表(生产场景首选)
如果你的字典表更新频率极低,映射逻辑简单,直接提前将编码对应的字面量关联合并到索引构建用的单表中是成本最低、查询性能最高的方案。该方案不需要额外配置技能集,也不会在查询阶段增加额外开销,适合绝大多数稳定的生产业务场景。
内容的提问来源于stack exchange,提问作者kmehta
相关产品推荐
相关产品推荐

