本文将介绍企业在没有向量数据的情况下,如何通过OpenSearch向量检索版、MaxCompute以及OSS,快速搭建图像搜索服务。
用户可以直接导入图片源数据,在OpenSearch内部便捷完成图片向量化、向量搜索等步骤,实现以图搜图、以文搜图等多种图像检索能力。
1. 方案架构
用户可以通过3种不同的方式上传图片进行图搜引擎的搭建:
- OSS+MaxCompute+OpenSearch向量检索版:用户先将图片上传至OSS中,在MaxCompute中存储业务表数据以及每条数据对应的图片地址(OSS里的路径,比如/image/1.jpg)
- MaxCompute+OpenSearch向量检索版:用户将图片通过base64编码后的图片及其表数据存储在MaxCompute中
- API+OpenSearch向量检索版:用户通过OpenSearch向量检索版给出的数据推送接口,将base64编码后的图片及其表数据推送到OpenSearch向量检索版实例中
本文演示的是OSS+MaxCompute+OpenSearch向量检索版搭建图搜引擎。
2. 环境准备
2.1 创建AK和SK
第一次开通阿里云账号并登录控制台时,会提示先创建access key才能继续使用。
- 创建及使用应用依赖access key参数,主账号下access key参数不能为空。
- 在为主账号创建access key参数后,还可以再创建RAM子账号access key通过RAM子账号进行访问,RAM子账号赋予对应访问权限,请参考RAM(子账号)的创建及授权。
2.2 创建对象存储OSS
本文在OSS中上传了1000张图片:
部分图片类型如下:
3. 购买OpenSearch向量检索版实例
购买实例可参考购买OpenSearch向量检索版实例。
4. 配置实例
新购买的实例,其状态为“待配置”,之后需要为该实例配置一张表,之后才可正常搜索。
4.1 填写表基础信息,点击下一步
配置说明:
- 表名称:可自定义
- 数据分片数:分片数设置时,各索引表分片数需保持一致;或至少一个索引表分片数为1,其余索引表分片数一致
- 数据更新资源数:数据更新所用资源数,每个索引默认免费提供2个4核8G的更新资源,超出免费额度的资源将产生费用,详情可参考数据更新费用
- 场景模板:选择“向量:图片搜索”
- 数据处理:选择“需将原始数据转为向量数据”
4.2 数据同步,配置数据源,校验通过后,点击下一步
配置参数说明:
- 数据源类型:选择MaxCompute
- Project:访问的目标MaxCompute项目名称
- accesskeyId:阿里云账号或RAM用户的AccessKey ID
- accesskeySecret:AccessKey ID对应的AccessKey Secret
- Table:访问的目标MaxCompute表名
- 分组键partition:MaxCompute数据源必须设置分区键; 示例:ds=20170626
- 时间戳:如果有API的增量数据,该配置表示回追多久的增量数据,系统默认最大能回追3天的API增量数据
- 自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建;
说明
开启自动索引重建,则必须创建done表,创建方式可参考自动索引重建
3、字段配置,配置完成后,点击下一步:
此处需要选择主键、向量字段、需embedding字段。
4.3 图片存储于OSS
模板选择“向量:图片搜索”模板后,系统默认生成4个预置字段id(主键)、cate_id(类目字段)、vector(向量字段)、vector_source_image(存储图片路径的字段),用户选择MaxCompute数据源后,从数据源同步的字段,展示在预置字段下方。
4.3.1.配置“vector_source_image”字段
字段类型需要为STRING,必须勾选为需embedding字段
用户可根据业务表字段对预置字段名称进行修改,但需要保证该字段的高级配置无误:
在弹框中填写相应信息:
- 数据类型:选择image(path)
- 内容来源类型:oss
- OSS存储空间:OSS的Bucket名称
- oss_secret:可以访问OSS的账号AK
- oss_accesskey:可以访问OSS的账号SK
重要
假设某张图片在OSS的路径为“/测试图片/湖泊.jpg”,那么该字段的内容也必须是“/测试图片/湖泊.jpg”,以下图举例:
OSS的路径:
MaxCompute字段值:
4.3.2.配置vector向量字段
字段类型需要为FLOAT,必须勾选为向量字段。
4.4 base64编码的图片
模板选择“向量:图片搜索”模板后,系统默认生成4个预置字段id(主键)、cate_id(类目字段)、vector(向量字段)、vector_source_image(存储图片路径的字段),用户选择MaxCompute数据源后,从数据源同步的字段,展示在预置字段下方。
4.4.1 配置“vector_source_image”字段
字段类型需要为STRING,必须勾选为需embedding字段
用户可根据业务表字段对预置字段名称进行修改,但需要保证该字段的高级配置无误:
在弹框中填写相应信息:
- 数据类型:选择image(base64编码)
4.4.2 勾选vector向量字段
字段类型需要为FLOAT,必须勾选为向量字段
4.4.3 索引结构配置,配置完成后点击下一步
配置说明:
- 向量索引名称与向量字段名称相同
- 包含字段为主键、向量字段、标签字段可选
- 高级配置按需填写
说明
通过引擎将图片生成的向量,默认为512维,并且不支持修改。
4.4.4 配置完成后,点击确认创建
6、可在变更历史中查看表的创建进度:
全量完成后,即可搜索测试。
5. 查询测试
查询示例:可参考预测查询。
结果展示:
{ "totalCount": 5, "result": [ { "id": 5, "score": 1.103209137916565 }, { "id": 3, "score": 1.1278988122940064 }, { "id": 2, "score": 1.1326735019683838 } ], "totalTime": 242.615 }
result 中 记录着返回的结果。