一、Azure AI搜索服务
微软Azure AI搜索服务,集成矢量化与 Azure OpenAI 嵌入。支持标准化的全文搜索,同时也支持使用模型将数据对象转化为矢量存储,通过生成查询嵌入和查找向量最接近查询的方式来搜索。

Azure AI搜索的整体架构
1、使用Azure AI搜索自带集成索引器进行数据处理、索引编制与集成

2、仅使用Azure AI的存储引擎与查询器,数据矢量化使用自建模型

二、重点概念解析
1、全文搜索索引
全文搜索索引允许用户在大量数据中快速检索文本信息。它通常用于数据库、搜索引擎和文档管理系统中,以提高搜索,尤其是文本模糊搜索的效率和准确性。
索引构建:
- 分词技术。将文档中的文本分割成更小的单元,通常是单词或短语,这个过程称为分词。
- 倒排索引。是一种索引结构,将拆分出的单词或者短语,与包含这些词的文档建立映射关系。即每个单词都有一个对应的倒排索引条目,来列出所有包含这个单词的文档。
结合Azure AI搜索的全文搜索索引:
- Azure的全文搜索索引,必须具备唯一的文档标识键,用于区分数据唯一性以及倒排索引映射关联键,同时具有至少一个可用于搜索的字段定义文档。
- 其索引管理中的“创建索引”功能,能够定义索引架构,可将原数据字段转换成按照架构存储的文档,同时可定义字段在搜索中的用法。
- 在将数据从源头抽取至Azure AI搜索服务并进行索引存储的过程中,会对已转换的文档进行分词以及倒排索引操作,可供搜索器进行全文搜索使用。
- Azure AI搜索的全文搜索索引架构信息,以JSON文档形式存储;物理存储结构,由微软内部实现。
- 在默认索引算法中,Azure提供了搜索匹配度的打分机制。分值越高,搜索匹配度越高。
Azure AI搜索全文索引结构示例如截图:

2、矢量搜索索引
矢量搜索索引允许在搜索过程中使用向量空间模型来表示和比较数据。这种索引特别适合于处理高维数据,如图像、音频或文本数据,其中相似性搜索是一个关键需求。
索引构建:
- 矢量运算。对于需要进行矢量搜索的数据或者对象,使用模型运算,将其转化为数组数据,称之为维度。例如,一个视频文件经过模型转化,生成了具有376个数字的数组,即该对象拥有376个维度。
- 距离或相似性算法。使用矢量的距离或者相似性算法,构建矢量数据节点之间的“最近的邻域”信息。
结合Azure AI搜索的矢量搜索索引:
- Azure的矢量搜索索引,在原有全文搜索索引的架构上,新增矢量嵌入字段,内容为由模型转换得到的维度数组。
- 在“创建索引”功能中,可自行添加是否使用矢量搜索索引。若使用矢量索引,则可引入OpenAI模型或者技能组,配置将相应的对象转换为矢量数据。
- 在将数据从源头抽取至Azure AI搜索服务并进行矢量存储的过程中,使用HNSW或者KNN算法,将相似维度数据放入索引中,为每个矢量字段都创建索引。
- Azure AI搜索的矢量搜索索引架构信息,以JSON文档形式存储;嵌入矢量字段以维度数字表示;其物理存储结构,由微软内部实现。
Azure AI搜索矢量索引结构示例如截图:

3、索引器
索引器可以理解为是集成了数据导入,处理,编制以及存储索引数据的工作流集合程序,可极大简化生成索引数据的流程。
在“索引器”功能菜单中,可新建与管理所有创建的索引器。
索引器工作流程:
- 通过定义的数据源抽取数据。支持SQL Server、MySQL与Blob数据源,不支持PostgreSQL数据源。
- 通过定义的索引架构,以及引入的技能组,将数据进行处理并模型运算。
- 将处理完毕的数据进行索引编制,同时存储在Azure AI搜索服务的底层存储中。
注意:
- 当且仅当SQL数据源开启了变更数据追踪(CDC),或者Blob存储开启了软删除功能,索引器才能基于变化数据探查,启用计划任务功能,定时运行并自动处理变化数据。
- 为了性能考虑与计算资源合理利用,无论是否加载技能组, 索引器每次运行时间,限制为不超过2小时,超过2小时强制停止。
- 索引器可设置每批次处理数据量。若单条数据本身容量较小,可参考设置每批次万条以上;若单条数据容量较大,可适当减少批次数量至千条。适当的批次数可提升索引器的执行效率,从而提升数据处理速度。
- 最大失败项目数与每批最大失败项目数不建议设置。设置后达到失败阈值会自动停止任务,大部分情况下对数据处理流程不够友好。
4、技能组
技能组,指从包含图像或非结构化文本的文档中提取内容,生成文本内容和结构的功能集合体。 例如图像识别(OCR)、无差别文本的实体识别和文本翻译等等。
从外部数据源提取文本和图像以及处理字段映射后,将执行索引器中配置引入的技能组中的技能。
技能组内的技能包括:Azure 机器学习,图像分析技能,语言检测技能,情绪技能,翻译技能等等。
特点:
- 技能组是任何索引器都能使用的顶层资源,且命名需唯一。
- 技能组以JSON形式进行存储。
- 在同一个技能组中,相同的技能可以被编辑重复使用。不同的技能可支持顺序,循环和分支操作。
- 在技能组JSON配置中添加knowledgeStore节点,可直接定义输出处理结果至知识存储;添加encryptionKey节点可指定Azure密钥库和客户管理的密钥,用于加密技能组定义中的敏感内容(如描述、连接字符串等)
- 启用扩充缓存功能,将处理中间结果缓存落盘,以便进行复用,减少开发成本。
注意:
- 每个技能组所能配置的技能数是有限的,目前最大值为30个技能。
5、知识存储
在Azure AI搜索服务进行索引编制的过程中,可以将生成的扩展数据,同步输出到Azure存储中的容器(Blob)或表映射(Table)。
独立于搜索服务,知识存储可用于非搜索场景中的独立数据分析,或者将数据提供给下游处理使用,例如数据工厂(ADF)。
注意:
- 搜索索引和知识存储是同一份源数据,在同一个索引编制过程中生成的不同形式的互斥产品。搜索索引是文档存储,知识存储是表—数据—对象之间的文档形式类关系存储。
优点:
- 可灵活访问内容。由于知识存储的数据类似于关系型数据存储,因此可便捷对接数据工具进行数据分析,例如接入Power BI进行数据钻取并展示
- 形状数据处理能力。在索引编制的过程中,技能组里引入整形程序技能,可用于控制数据科学工作中使用到的数据形状,从而生成稳定的与预期一致的物理数据结构。这些数据结构可用于下游应用或程序。
三、配置建议
1、副本与分区
副本:是搜索服务的实例,主要用于对查询操作进行负载均衡。
分区:为写操作(例如,在重建或刷新索引时进行的此类操作)提供物理存储和 I/O。 每个分区都有总体索引的一个切片。
Azure AI搜索服务,通过使用多副本方式来保证索引数据存储安全性,以及提高索引数据查询效率(QPS)。通过多分区方式来提升数据写入或者修改效率。
由于需要遵循数据SLA与奇数选举原则,因此通常情况下,存储最少建议3副本起,才能达到读写高可用性99.9%。2副本下,数据读取SLA可达到99.9%,数据写入无SLA。1副本下,数据无SLA状态。
分区数根据写入速率而定。由于使用了分区载入技术,因此分区越多,索引数据写入效率越高。在数据写入频繁的索引场景中,通常建议每副本3分区起步。
注意:
- Azure AI搜索服务存储规格有总额限制,称为搜索单位。总搜索单位不能超过36,计算公式为 分区*副本<=36
- 如果不确定预计服务负载有多大,请从S1层级服务开始选择。该层级价格相对较低,且保留完整36搜索单位的可扩展性。
- L1与L2层级是专为超大容量索引编制以及查询负载相对较低的场景使用。
2、资源清单
创建Azure AI搜索服务,需要提供以下清单信息

3、权限管理
建议:通常情况下,应用程序建议使用API密钥进行权限管理。因为基于角色的访问控制可能会增加某些请求的延迟。 服务资源(索引、索引器等)和服务主体的每个唯一组合都会触发授权检查。 这些授权检查可能会给每个请求最多增加 200 毫秒的延迟。
API密钥

API 密钥的查看和管理权限是通过角色分配传播的。
以下角色的成员可以查看和重新生成密钥:
- 所有者
- 参与者
- 搜索服务参与者
- 管理员和共同管理员(经典)
以下角色无权访问 API 密钥:
- 读者
- 搜索索引数据参与者
- 搜索索引数据读取者
基于角色的访问控制

四、使用场景
Azure AI搜索服务适用于以下场景:
1、全文搜索。例如为自有系统中的文本模糊搜索建立搜索引擎,从而实现快速模糊文本搜索功能。
2、以图搜图。例如阿里1688的用图搜工厂功能,通过给到的商品图片,使用矢量搜索,在1688库中搜索拥有相同商品的在线工厂。
3、商品推荐。将商品矢量化,再通过与客户购买过的商品进行近邻运算,可以获得关联度最高的商品进行推荐。
4、客户画像。对客户整个购买行为,包括所有商品,语言等进行矢量化,再通过其他模型运算,从而获得客户的习惯,爱好等行为画像,精准营销。
五、开发语言支持
Azure AI搜索服务支持以下开发语言:
- C#
- Java
- Python
- JavaScript