端到端图搜解决方案

更新时间:2025-04-09 10:35:45

本文将介绍企业在没有向量数据的情况下,如何通过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.创建AKSK

第一次开通阿里云账号并登录控制台时,会提示先创建access key才能继续使用。

  • 创建及使用应用依赖access key参数,主账号下access key参数不能为空。

  • 在为主账号创建access key参数后,还可以再创建RAM子账号access key通过RAM子账号进行访问,RAM子账号赋予对应访问权限,请参考RAM(子账号)的创建及授权

2.创建对象存储OSS

image_409ce896ccx9

  1. 开通OSS服务

  2. 控制台创建存储空间

  3. 控制台上传文件

  1. 添加opensearch标签:(key-value 值均为opensearch)

image

本文在OSS中上传了1000张图片:

image_409d36b4ccr4

部分图片类型如下:

image_409d84d0cc9c

购买OpenSearch向量检索版实例

购买实例可参考购买OpenSearch向量检索版实例

配置实例

实例列表页面,找到新购买的实例,其状态为“待配置”,需要完成表的配置后,才可正常搜索。

image.png

1. 表基础信息

image.png

配置说明

  • 表名称:可自定义

  • 数据分片数:分片数设置时,请填写不超过256的正整数, 用于提升全量构建速度、单次查询性能。(部分存量实例,仍需各索引表分片数保持一致;或至少一个索引表分片数为1,其余索引表分片数一致)

  • 数据更新资源数:数据更新所用资源数,每个索引默认免费提供248G的更新资源,超出免费额度的资源将产生费用,详情可参考向量检索版计费概述

  • 场景模板:选择“向量:图片搜索”。

2. 数据同步

全量数据来源选择MaxCompute+API方式,依次完成参数配置,最后需要通过数据来源校验,才能进行下一步的操作。

image.png

配置参数说明

  • AccessKey:阿里云账号或RAM用户的AccessKey ID。

  • AccessKey Secret:AccessKey ID对应的AccessKey Secret。

  • 项目名 (Project):访问的目标MaxCompute项目名称。

  • 表名 (Table):访问的目标MaxCompute表名。

  • 表数据分区 (Partition):MaxCompute数据源必须设置分区键; 示例:ds=20170626。

  • 自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建。

说明

开启自动索引重建,则必须创建done表,创建方式可参考自动索引重建

3. 字段配置

向量检索版会根据选择的场景模板,预置相关字段,并将全量数据来源中的字段,自动导入字段列表中,下图是「向量:图片搜索」模板包含4个预置字段。

image.png

字段配置说明:

  • 预设字段1.id(主键)、2.source_image(源图片)、3.namespace(命名空间)、4.source_image_vector(源图片向量)。

  • 必选字段:主键字段和向量字段,主键字段为intstring类型并且需要勾选主键按钮,向量字段为float类型并且需要勾选向量字段按钮。

  • 向量字段默认为多值的float类型,控制台建表默认采用英文逗号切分,支持自定义多值分隔符。

  • 图片向量化的字段,需要在需数据预处理中勾选去配置,对source_image预设字段进行配置。

  • 使用向量检索,在定义字段时有位置要求,需要按照主键字段、命名空间字段(非必要)、向量字段的顺序创建(如上图所示)。

字段 source_image 数据预处理配置说明:

image.png

  • 数据来源:有OSS对象存储和Base64编码的两种数据类型选项。

    • OSS对象存储:需要填写OSS路径,其实是将图片存储在OSS的文件夹里面,从OSS直接导入。

    • Base64编码:相当于需要先将图片进行一次编码,然后存储在数据库中,或者直接用API方式进行传输。

  • 预处理模板:会根据要进行预处理的数据类型(文本或图片)而展示不同模板,由于字段的数据是图片类型,所以此时预处理模板展示的分别为(1.图片向量化、2.OCR图片文字识别、3.OCR图片文字识别+图片向量化)三种模板。

  • 服务列表:

    • 选定预处理模板后,自动出现模板下的服务列表,展示该模板下所用到的模型种类。

    • 可选的模型有两个来源:

      • 内置模型:模型种类与数量较少,可免费调用。

      • AI搜索开放平台:模型能力丰富,需按调用量收费,计费详情参见计费方式和计费项,在使用AI搜索开放平台前完成工作空间和API Key开通。

      • 自定义模型:用户创建的自定义模型,可参考自定义模型进行创建。

    • AI平台OCR图片文字识别/文本向量服务

      • OCR图片文字识别:针对架构图、分析图表等图片数据,AI搜索开放平台提供图片内容理解服务,可基于多模态大模型对图片内容进行解析理解以及文字识别,也可基于OCR能力对图片文字进行识别,将文字信息提取出来,用于图片检索及问答等场景。

      • 文本向量化:提供将文本数据转化为稠密向量形式表达的服务,支持多款不同语言、输入长度、输出维度的文本向量模型,可用于信息检索、文本分类、相似性比较等场景。

  • 生成字段:原始图片数据经过模型处理后,会被自动转化为其他格式,生成新的字段内容

    • embedding处理类的服务,默认必须生成字段。

    • ocr服务可选是否生成字段。

  • 接口调用配置:为了成功访问AI搜索开放平台,需要完成工作空间、API Key、连接域名的设置。image.png

4. 索引结构

image.png

配置说明:

  • 向量索引名称与向量字段名称相同。

  • 包含字段为主键、向量字段、命名空间字段可选。

  • 高级配置可按需要填写,详情可参考向量索引通用配置

5. 确认创建

点击确认创建,完成表的创建,在左侧导航栏日志记录变更历史,可以查看表的创建进度,当状态显示完成后,就可以进行查询测试的操作。

image.png

image.png

查询测试

1.控制台查询测试

在左侧导航栏选择向量管理 > 查询测试,控制台的查询测试功能同时支持表单/开发者模式,控制台查询用法可以参考:查询测试

1.1 表单模式

依次选择好表单模式 > 表名Query类型以图片类型为例(支持向量、文本、图片三种方式),图片提供方式选择上传图片文件,完成查询图片的上传后,点击搜索就可以在搜索结果栏中查看到结果。

image

1.2 开发者模式

依次选择好开发者模式 > 表名,在下方的搜索框内输入查询参数,完成后点击搜索就可以在右侧的结果栏内看到查询结果。

image

字段说明

  • 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中使用向量检索