基于Azure SQL多表创建带变更检测的Azure认知搜索索引最佳实践
解决方案建议
定期增量更新(无需全量重建)
虽然SQL视图不支持内置变更检测,但可以通过以下方式实现10分钟一次的增量更新:- 在
Entities、Tags、EntityTags表中添加lastUpdated datetime2类型的更新时间戳字段,确保每次数据增删改时自动更新该字段。 - 编写参数化查询替代视图,每次更新时仅拉取最近10分钟内
lastUpdated有变化的实体,重新生成对应的逗号分隔标签列表。 - 在Azure认知搜索中配置定时索引器,每10分钟执行一次该参数化查询,将增量数据同步到搜索索引。这种方式避免全量重建,能有效提升更新效率。
- 在
改用聚合表作为数据源(推荐)
若业务场景允许,可创建实体标签聚合表优化同步流程:- 借助数据库触发器或Azure Functions,在
Entities、Tags、EntityTags发生数据变更时,自动更新聚合表中的tagLabels字段(存储逗号分隔的标签列表),同时维护好更新时间戳。 - 将该聚合表设为Azure认知搜索的数据源,开启基于时间戳字段的变更检测,搜索服务会自动同步新增或修改的数据,无需手动配置定时任务,实时性和稳定性更优。
- 借助数据库触发器或Azure Functions,在
全量重建的适用场景
如果数据规模较小,或者需要修正索引中的错误数据,可以每月或每周执行一次全量重建,但日常更新优先采用增量同步方式。
内容的提问来源于stack exchange,提问作者egyedg
相关产品推荐
相关产品推荐

