购买OpenSearch召回引擎版实例
购买实例可参考购买OpenSearch召回引擎版实例。
配置表
在实例列表页面,找到新购买的实例,其状态为“待配置”,需要完成表的配置后,才可正常搜索。
1. 表基础信息
配置说明:
表名称:可自定义
数据分片数:分片数设置时,请填写不超过256的正整数, 用于提升全量构建速度、单次查询性能。
数据更新资源数:实时数据更新资源数,调整资源可以扩大消费实时数据的并发数,从而提高TPS。
数据更新资源数默认有2个免费资源,数据量超过2,按n-2 计费,n是单表的数据更新资源总数
2. 数据同步
目前支持的数据源有“MaxCompute + API 数据源”、“API 数据源”、“OSS + API 数据源”、“数据湖构建(DLF)”,本次演示的全量数据来源以MaxCompute+API的方式为例,依次完成参数配置后,还需要再通过数据来源校验,才能进行下一步的操作。
配置参数说明:
AccessKey:阿里云账号或RAM用户的AccessKey ID。
AccessKey Secret:AccessKey ID对应的AccessKey Secret。
项目名 (Project):访问的目标MaxCompute项目名称。
表名 (Table):访问的目标MaxCompute表名。
表数据分区 (Partition):MaxCompute数据源必须设置分区键; 示例:ds=20170626。
自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建。
3.索引结构
由于选择了MaxCompute+API的数据源方式,所以会自动映射数据源字段,我们还需要对字段和索引进行设置。
配置说明:
字段配置:文本向量化是通过系统将文本转换成向量,然后通过向量进行检索数据,因此此处需要配置3个必须字段,如上图(名称均可以自定义):
id(主键字段):类型可以为 STRING 或者整数类型,需要勾选主键。
vector_source_text(存储文本内容):
vector字段,该字段的配置保持为空即可,平台转化向量的设置需要在高级配置 > 去配置中进行。
字段说明:
vector_model:向量模型,目前支持中英文多种模型(维度固定为768),以下为可选的模型。
ops-text-embedding-000,短文本转向量模型
ops-text-embedding-en-000:英文短文本转向量模
ops-text-embedding-1024-000-20231001:增强版中文转向量 1024
ops-text-embedding-512-000-20231001:增强版中文转向量 512
ops-text-embedding-128-000-20231001:增强版中文转向量 128
ops-text-embedding-512-en-000-20231001:增强版英文转向量 512
ops-text-embedding-128-en-000-20231001:增强版英文转向量 128
vector_modal:向量类型,文本向量,本文中为text。
vector_source_field:需要文本向量化的字段,本文中为vector_source_text。
属性和字段内容压缩:
属性字段可以选择是否压缩,默认为不压缩,选择file_compressor表示开启压缩
字段内容可以选择是否压缩,默认为不压缩,默认多值和STRING类型选择uniq,单值数值类型是equal。
如果是MaxCompute数据源或OSS数据源,从数据源同步字段后,展示在预置字段下方。
主键字段不支持压缩。
字段压缩、属性压缩开启后将节省存储空间,但查询性能可能有所下降。
索引设置,必要设置的索引为主键索引和向量索引。
主键索引:名称自定义,索引类型选择PRIMARYKEY64,包含字段选择字段设置中设置为主键的字段,此处为id。
向量索引:名称自定义,索引类型选择CUSTOMIZED,包含字段可选择3个,如果没有标签可以不填,但是主键字段和向量字段必选。
在向量索引的高级配置 > 查看/修改中需要将dimension改成768维,固定768维不可修改为其他维度,其他参数建议保持默认。
schema示例:
{
"file_compress": [
{
"name": "file_compressor",
"type": "zstd"
},
{
"name": "no_compressor",
"type": ""
}
],
"table_name": "xiaoming001",
"summarys": {
"summary_fields": [
"id",
"vector_source_text",
"cate_id",
"vector"
],
"parameter": {
"file_compressor": "zstd"
}
},
"indexs": [
{
"index_name": "id",
"index_type": "PRIMARYKEY64",
"index_fields": "id",
"has_primary_key_attribute": true,
"is_primary_key_sorted": false
},
{
"index_name": "vector",
"index_type": "CUSTOMIZED",
"index_fields": [
{
"boost": 1,
"field_name": "id"
},
{
"boost": 1,
"field_name": "vector"
}
],
"indexer": "aitheta2_indexer",
"parameters": {
"enable_rt_build": "true",
"min_scan_doc_cnt": "20000",
"vector_index_type": "Qc",
"major_order": "col",
"builder_name": "QcBuilder",
"distance_type": "SquaredEuclidean",
"embedding_delimiter": ",",
"enable_recall_report": "true",
"ignore_invalid_doc": "true",
"is_embedding_saved": "false",
"linear_build_threshold": "5000",
"dimension": "768",
"rt_index_params": "{\"proxima.oswg.streamer.segment_size\":2048}",
"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
"searcher_name": "QcSearcher",
"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
}
}
],
"attributes": [
{
"field_name": "id",
"file_compress": "no_compressor"
},
{
"field_name": "vector_source_text",
"file_compress": "no_compressor"
},
{
"field_name": "cate_id",
"file_compress": "no_compressor"
},
{
"field_name": "vector",
"file_compress": "no_compressor"
}
],
"fields": [
{
"user_defined_param": {},
"field_name": "id",
"field_type": "INT64",
"compress_type": "equal"
},
{
"field_name": "vector_source_text",
"field_type": "STRING",
"compress_type": "uniq"
},
{
"field_name": "cate_id",
"field_type": "STRING",
"compress_type": "uniq"
},
{
"user_defined_param": {
"vector_model": "ops-text-embedding-000",
"vector_modal": "text",
"vector_source_field": "vector_source_text"
},
"field_name": "vector",
"field_type": "FLOAT",
"compress_type": "uniq",
"multi_value": true
}
]
}
4.确认创建
点击确认创建,完成创建表。
返回到实例详情页,功能扩展 > 变更历史中可以查看创建进度,进度完成后,即可进行查询测试。
效果测试
语法介绍
vector:'水壶&modal=text&n=10&search_params={}'&&config=start:0,hit:10,format:json&&kvpairs=formula:proxima_score(vector)&&sort=+RANK
modal表示模态类型,modal设置为text
n表示指定向量检索返回的top结果数
文本内容若有特殊不可见字符需要经过base64编码
通过控制台进行查询测试:
SDK中检索数据
添加依赖:
pip install alibabacloud-ha3engine
搜索 demo:
# -*- coding: utf-8 -*-
from alibabacloud_ha3engine import models, client
from alibabacloud_tea_util import models as util_models
from Tea.exceptions import TeaException, RetryError
def search():
Config = models.Config(
endpoint="参考实例详情页>API入口下的API域名",
instance_id="",
protocol="http",
access_user_name="购买实例时设置的用户名",
access_pass_word="购买实例时设置的密码"
)
# 如用户请求时间较长. 可通过此配置增加请求等待时间. 单位 ms
# 此参数可在 search_with_options 方法中使用
runtime = util_models.RuntimeOptions(
connect_timeout=5000,
read_timeout=10000,
autoretry=False,
ignore_ssl=False,
max_idle_conns=50
)
# 初始化 Ha3Engine Client
ha3EngineClient = client.Client(Config)
optionsHeaders = {}
try:
# 示例1: 直接使用 ha 查询串进行搜索.
# =====================================================
query_str = "config=hit:4,format:json,fetch_summary_type:pk,qrs_chain:search&&query=text_index:'文本内容&modal=text&n=10&search_params={}'&&cluster=general"
haSearchQuery = models.SearchQuery(query=query_str)
haSearchRequestModel = models.SearchRequestModel(optionsHeaders, haSearchQuery)
hastrSearchResponseModel = ha3EngineClient.search(haSearchRequestModel)
print(hastrSearchResponseModel)
except TeaException as e:
print(f"send request with TeaException : {e}")
except RetryError as e:
print(f"send request with Connection Exception : {e}")
其他SDK demo可参考开发指南
注意事项
如果对向量检索耗时有较严格的要求,建议mmap策略示例。
存储文本字段需要设置为STRING。
向量索引需要设置为CUSTOMIZED类型。
该场景支持HA语法、RESTFUL API,不支持SQL。
- 本页导读 (1)
- 购买OpenSearch召回引擎版实例
- 配置表
- 1. 表基础信息
- 2. 数据同步
- 3.索引结构
- 4.确认创建
- 效果测试
- 语法介绍
- SDK中检索数据
- 注意事项