本文将介绍企业在没有向量数据的情况下,如何通过OpenSearch向量检索版,快速搭建图像搜索服务。
用户可以直接导入图片源数据,在OpenSearch内部便捷的完成图片向量化、向量搜索等步骤,实现以图搜图、以文搜图等多种图像检索能力。
方案架构
用户可以通过4种不同的方式上传图片进行图搜引擎的搭建:
OSS+MaxCompute+OpenSearch向量检索版:用户先将图片上传至OSS中,在MaxCompute中存储业务表数据以及每条数据对应的图片地址(OSS里的路径,比如/image/1.jpg)。
MaxCompute+OpenSearch向量检索版:用户将图片通过base64编码后的图片及其表数据存储在MaxCompute中。
API+OpenSearch向量检索版:用户通过OpenSearch向量检索版提供的数据推送接口,将base64编码后的图片及其表数据推送到OpenSearch向量检索版实例中。
数据湖构建(DLF)+OpenSearch向量检索版:用户将图片数据迁移到数据湖构建DLF 2.0 Catalog下的数据表中。
本文演示的是OSS+MaxCompute+OpenSearch向量检索版搭建图搜引擎。
环境准备
1.创建AK和SK
第一次开通阿里云账号并登录控制台时,会提示先创建access key才能继续使用。
创建及使用应用依赖access key参数,主账号下access key参数不能为空。
在为主账号创建access key参数后,还可以再创建RAM子账号access key通过RAM子账号进行访问,RAM子账号赋予对应访问权限,请参考RAM(子账号)的创建及授权。
2.创建对象存储OSS
添加opensearch标签:(key-value 值均为opensearch)
本文在OSS中上传了1000张图片:
部分图片类型如下:
购买OpenSearch向量检索版实例
购买实例可参考购买OpenSearch向量检索版实例。
配置实例
在实例列表页面,找到新购买的实例,其状态为“待配置”,需要完成表的配置后,才可正常搜索。
1. 表基础信息
配置说明:
表名称:可自定义
数据分片数:分片数设置时,请填写不超过256的正整数, 用于提升全量构建速度、单次查询性能。(部分存量实例,仍需各索引表分片数保持一致;或至少一个索引表分片数为1,其余索引表分片数一致)
数据更新资源数:数据更新所用资源数,每个索引默认免费提供2个4核8G的更新资源,超出免费额度的资源将产生费用,详情可参考向量检索版计费概述。
场景模板:选择“向量:图片搜索”。
2. 数据同步
全量数据来源选择MaxCompute+API方式,依次完成参数配置,最后需要通过数据来源校验,才能进行下一步的操作。
配置参数说明:
AccessKey:阿里云账号或RAM用户的AccessKey ID。
AccessKey Secret:AccessKey ID对应的AccessKey Secret。
项目名 (Project):访问的目标MaxCompute项目名称。
表名 (Table):访问的目标MaxCompute表名。
表数据分区 (Partition):MaxCompute数据源必须设置分区键; 示例:ds=20170626。
自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建。
开启自动索引重建,则必须创建done表,创建方式可参考自动索引重建。
3. 字段配置
向量检索版会根据选择的场景模板,预置相关字段,并将全量数据来源中的字段,自动导入字段列表中,下图是「向量:图片搜索」模板包含4个预置字段。
字段配置说明:
预设字段:1.id(主键)、2.source_image(源图片)、3.namespace(命名空间)、4.source_image_vector(源图片向量)。
必选字段:主键字段和向量字段,主键字段为int或string类型并且需要勾选主键按钮,向量字段为float类型并且需要勾选向量字段按钮。
向量字段默认为多值的float类型,控制台建表默认采用英文逗号切分,支持自定义多值分隔符。
图片向量化的字段,需要在需数据预处理中勾选去配置,对source_image预设字段进行配置。
使用向量检索,在定义字段时有位置要求,需要按照主键字段、命名空间字段(非必要)、向量字段的顺序创建(如上图所示)。
字段 source_image 数据预处理配置说明:
数据来源:有OSS对象存储和Base64编码的两种数据类型选项。
OSS对象存储:需要填写OSS路径,其实是将图片存储在OSS的文件夹里面,从OSS直接导入。
Base64编码:相当于需要先将图片进行一次编码,然后存储在数据库中,或者直接用API方式进行传输。
预处理模板:会根据要进行预处理的数据类型(文本或图片)而展示不同模板,由于字段的数据是图片类型,所以此时预处理模板展示的分别为(1.图片向量化、2.OCR图片文字识别、3.OCR图片文字识别+图片向量化)三种模板。
服务列表:
选定预处理模板后,自动出现模板下的服务列表,展示该模板下所用到的模型种类。
可选的模型有两个来源:
AI平台OCR图片文字识别/文本向量服务
OCR图片文字识别:针对架构图、分析图表等图片数据,AI搜索开放平台提供图片内容理解服务,可基于多模态大模型对图片内容进行解析理解以及文字识别,也可基于OCR能力对图片文字进行识别,将文字信息提取出来,用于图片检索及问答等场景。
文本向量化:提供将文本数据转化为稠密向量形式表达的服务,支持多款不同语言、输入长度、输出维度的文本向量模型,可用于信息检索、文本分类、相似性比较等场景。
生成字段:原始图片数据经过模型处理后,会被自动转化为其他格式,生成新的字段内容
embedding处理类的服务,默认必须生成字段。
ocr服务可选是否生成字段。
接口调用配置:为了成功访问AI搜索开放平台,需要完成工作空间、API Key、连接域名的设置。
4. 索引结构
配置说明:
向量索引名称与向量字段名称相同。
包含字段为主键、向量字段、命名空间字段可选。
高级配置可按需要填写,详情可参考向量索引通用配置。
5. 确认创建
点击确认创建,完成表的创建,在左侧导航栏日志记录 > 变更历史,可以查看表的创建进度,当状态显示完成后,就可以进行查询测试的操作。
查询测试
1.控制台查询测试
在左侧导航栏选择向量管理 > 查询测试,控制台的查询测试功能同时支持表单/开发者模式,控制台查询用法可以参考:查询测试。
1.1 表单模式
依次选择好表单模式 > 表名,Query类型以图片类型为例(支持向量、文本、图片三种方式),图片提供方式选择上传图片文件,完成查询图片的上传后,点击搜索就可以在搜索结果栏中查看到结果。
1.2 开发者模式
依次选择好开发者模式 > 表名,在下方的搜索框内输入查询参数,完成后点击搜索就可以在右侧的结果栏内看到查询结果。
字段说明:
vector:具体要查询的向量
topK:取top K个结果
includeVector:是否返回文档中的向量信息
详细的查询语法可参考下方的语法说明。
2.SDK查询
查询示例:可参考预测查询。
结果展示:
{
"totalCount": 5,
"result": [
{
"id": 5,
"score": 1.103209137916565
},
{
"id": 3,
"score": 1.1278988122940064
},
{
"id": 2,
"score": 1.1326735019683838
}
],
"totalTime": 242.615
}
result中记录着返回结果。
语法说明
SDK中使用向量检索
- 本页导读 (1)
- 方案架构
- 环境准备
- 1.创建AK和SK
- 2.创建对象存储OSS
- 购买OpenSearch向量检索版实例
- 配置实例
- 1. 表基础信息
- 2. 数据同步
- 3. 字段配置
- 4. 索引结构
- 5. 确认创建
- 查询测试
- 1.控制台查询测试
- 2.SDK查询
- 语法说明
- SDK中使用向量检索