OSS + API 数据源

本文介绍添加表选择对象存储OSS+API为数据源时的操作步骤。

添加OSS+API数据源,需要以下两步:

  1. 在实例对应区域开通OSS服务

  2. 参照添加OSS数据源中的步骤进行配置。

开通OSS服务

  1. 开通OSS服务

    说明
    • 开通的OSS服务,需要和已购买的OpenSearch服务在同一个地域。

    • 开通OSS服务,需要设置添加opensearch标签。

    • 向量检索版不支持无地域属性的OSS的bucket。

    • 执行新增OSS数据源操作时,将会自动创建一个服务关联角色(如已经创建,则不会重复创建)OpenSearch-向量检索版服务关联角色,开放搜索使用此角色来访问您在其他云产品中的资源以完成相应功能。

  2. 控制台创建存储空间

  3. 控制台上传文件

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

    image.png

添加OSS数据源

  1. 实例详情>表管理页,点击添加表

  2. 填写表的基础信息,点击下一步

    image.png

    配置说明

    • 表名称:可自定义。

    • 数据分片数:请填写不超过256的正整数, 用于提升全量构建速度、单次查询性能(建议不超过实例数据节点数的3倍)。

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

    • 场景模板:向量检索版内置了3种模板可供用户选择:通用、向量-图片搜索、向量-文本语义模板。

  3. 数据同步,配置数据源,校验通过后,点击下一步

    cn表创建-数据同步.png

    • 全量数据来源:选择对象存储OSS+API。

    • OSS路径:访问OSS文件的路径,需以/开头,路径中不允许包含?、=、&符号,文件不能放在根目录,需放在某个文件夹下然后填写路径。

    • OSS存储空间(Bucket):OSS的Bucket名称。

    • 数据格式:可选HA3格式JSON格式

    • 数据来源校验:校验通过后可进行下一步。

      说明
      • OSS路径在创建好的Bucket名称点击进入后-新建目录-选择创建好的目录路径,此处示例路径为/opensearch_index_data/:

      image.png

      • 存储空间(Bucket) :OSS的Bucket名称(来源:在开通的OSS服务Bucket里使用创建好的Bucket名称-如下图所示)

      image.png

  1. 字段配置,配置完成后,点击下一步:

    image

    案例中配置了2个字段pk、embeddings,样例数据可参考(样本数据:oss_test.txt):

    CMD=add
    pk=999000
    embeddings=0.00.0039257140.0098142860.0039257140.00
    pk=999000
    embeddings=0.00.0039257140

    oss中的文件内容可参考下文中的文件格式

说明
  • 必选字段有:主键字段和向量字段,主键字段为int或string类型并且需要勾选主键按钮,向量字段为float类型并且需要勾选向量字段按钮;

  • 向量字段默认为多值的float类型,多值分隔符默认使用ha3分割符^] 进行切分(其对应utf编码为\x1D),也可以输入自定义多值分隔符

  • 当数据中缺少字段或字段为空时,系统将自动补充默认值,数字类型默认补0,STRING类型默认补空字符串,支持自定义默认值

  1. 索引结构配置,配置完成后,点击下一步:

    image.png

    此处主要针对向量索引进行配置:

    • 主键字段、向量字段必须填写,命名空间字段非必填,可以为空。

    • 仅支持选择固定的三个字段,不支持新增。

    • 向量维度:根据模型生成的向量按需选择。

    • 向量距离:根据模型生成的向量按需选择,系统支持的距离类型有两种:SquareEuclidean和InnerProduct。

    • 向量索引算法:根据模型生成的向量按需选择,系统支持的向量索引算法有量化聚类(Quantized Clustering)linearHNSW(Hierarchical Navigable Small World)QGraph(Quantized Graph)配置

    • 实时索引:表示API的增量数据是否需要实时构建向量索引,默认为true。

    其他高级配置,可点击展开进行配置,参数说明可参考向量索引通用配置

    image.png

  1. 确认创建,点击确认创建后,系统将自动创建配置好的表:

    image.png

    可在变更历史中查看创建表进度:

    image.png

  1. 当表状态在使用中时,即可在查询测试页面进行查询测试:

    image.png

文件格式

文件是建立索引的数据源(注意:需要是utf-8的编码),当前支持ha3与JSON格式。

HA3格式

  • 首先看一个完整的数据文件standard_sample.data的内容

CMD=add^_
PK=12345321^_
url=http://www.aliyun.com/index.html^_
title=阿里云计算有限公司^_
body=xxxxxx xxx^_
time=3123423421^_
multi_value_field=1234^]324^]342^_
bidwords=mp3^\price=35.8^Ptime=13867236221^]mp4^\price=32.8^Ptime=13867236221^_
^^
CMD=delete^_
PK=12345321^_CMD=add^_
PK=12345321^_
url=http://www.aliyun.com/index.html^_
title=阿里云计算有限公司^_
body=xxxxxx xxx^_
time=3123423421^_
multi_value_field=1234^]324^]342^_
bidwords=mp3^\price=35.8^Ptime=13867236221^]mp4^\price=32.8^Ptime=13867236221^_
^^
CMD=delete^_
PK=12345321^_

可以看到上面的数据文件中总共有两个命令,分别是add、delete。每个命令由多行组成,每行都是一个key-value对。 命令与命令之间用'^^\n'分隔,每一对key-value之间以'^_\n'分隔,多值之间以'^]'分隔。下面详细介绍。

  • 文件分隔符定义

C++编码

ASCII

16进制

描述

(emacs/vi)中的显示形态

emacs中输入方法

vi中输入方法

"\x1F\n"

1F0A

key value分隔符

^_(接换行)

C-q C-7

C-v C-7

"\x1E\n"

1E0A

命令分隔符

^^(接换行)

C-q C-6

C-v C-6

"\x1D"

1D

multi value 分隔符

^]

C-q C-5

C-v C-5

"\x1C"

1C

section weight标志符

^\

C-q C-4

C-v C-4

"\x1D"

1D

section 分隔符

^]

C-q C-5

C-v C-5

"\x03"

03

sub doc 字段分隔符

^C

C-q C-c

C-v C-c

  • 命令格式定义

    • Add command formatadd命令表示往索引中增加新的内容。add命令第一行必须为CMD=add,后面是该文档的field,field顺序可以与schema中fields顺序一致,所有出现的field必须是fields中指定的。

CMD=add^_
PK=12345321^_
url=http://www.aliyun.com/index.html^_
title=阿里云计算有限公司^_
body=xxxxxx xxx^_
time=3123423421^_
multi_value_field=1234^]324^]342^_
bidwords=mp3^\price=35.8^Ptime=13867236221^]mp4^\price=32.8^Ptime=13867236221^_
^^CMD=add^_
PK=12345321^_
url=http://www.aliyun.com/index.html^_
title=阿里云计算有限公司^_
body=xxxxxx xxx^_
time=3123423421^_
multi_value_field=1234^]324^]342^_
bidwords=mp3^\price=35.8^Ptime=13867236221^]mp4^\price=32.8^Ptime=13867236221^_
^^
    • Delete command formatdelete命令表示从索引中删除指定的内容。delete命令第一"行"必须为CMD=delete,接下来的"行"为index schema中定义属性为primary key 的field,以及用于partition hash的field,如果两个field相同,则只需要出现一个field。

CMD=delete^_
PK=12345321^_
^^CMD=delete^_
PK=12345321^_
^^

JSON格式

多条记录示例,'\n'表示换行符,单条记录不能有换行符,参考:

{"field_double": ["100.0", "221.123", "500.3333333"], "field_int32": ["100", "200", "300"], "title": "华为 Mate 9 麒麟960芯片 徕卡双镜头", "color": "红", "empty_int32": "", "price": "3599", "CMD": "add", "nid": "1", "gather_cn_str": "", "desc": ["str1", "str2", "str3"], "brand": "Huawei", "size": "5.9","__subdocs__":[{"sub_pk":"100","sub_field1":"200","sub_field2":["100","200","300"]},{"sub_pk":"200","sub_field1":"200","sub_field2":["100","200","300"]}]}
{"field_double": ["100.0", "221.123", "500.3333333", "100.0", "221.123", "500.3333333"], "field_int32": ["100", "200", "300", "100", "200", "300"], "title": "Huawei/华为 P10 Plus全网通手机", "color": "蓝", "empty_int32": "", "price": "4388", "CMD": "add", "nid": "2", "gather_cn_str": "color蓝", "desc": ["str1", "str2", "str3", "str1", "str2", "str3"], "brand": "Huawei", "size": "5.5","__subdocs__":[{"sub_pk":"100","sub_field1":"200","sub_field2":["100","200","300"]},{"sub_pk":"200","sub_field1":"200","sub_field2":["100","200","300"]}]}