OSS + API 数据源

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

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

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

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

开通OSS服务

  1. 开通OSS服务

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

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

    • 召回引擎版不支持无地域属性的OSS的bucket。

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

  2. 控制台创建存储空间

  3. 控制台上传文件

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

    image.png

添加OSS数据源

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

  2. 表管理界面开始配置表基础信息,填写表名称,分片数和数据更新资源数:

    引擎表信息.png

    配置说明

    • 表名称:可自定义。

    • 数据分片数:表分片不超过256的正整数即可(建议不超过实例数据节点数的3倍)。

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

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

    数据同步2.png

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

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

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

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

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

说明
  • 目录名必须包含opensearch,或者必须有opensearch:opensearch的标签,否则将无法读到数据,且不可包含 = & ?等特殊符号。

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

image.png

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

image.png

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

    image

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

CMD=add
pk=999000
namespace=0.00.0039257140.0098142860.0039257140.00
pk=999000
namespace=0.00.0039257140

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

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

    image.png

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

    image.png

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

    image.png

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

    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 format delete命令表示从索引中删除指定的内容。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"]}]}