为满足更加多元化和复杂的业务场景,开放搜索推出了向量检索功能。在特定业务场景下,特别是在教育搜题和图片搜索场景中,结合多路搜索功能可以显著提升搜索结果的准确性。本文将对向量索引的语法说明及其注意事项进行详细介绍。
语法说明
query = vector_index:'向量'&vector_search={"vector_index":{"namespaces":[],"threshold":0.5,"top_n":10,"search_params":{}}}
其中vector_search为可选参数,用于向量索引查询配置。整体是一个字典格式,key为查询的向量索引,value为具体的查询配置。value常用配置项包括:
参数名 | 类型 | 默认值 | 说明 |
namespaces | list<string> | 通过命名空间将向量索引进行分区,查询请求可被限制在索引的不同分区中;命名空间数不建议超过10000个;配置了命名空间后,查询时必须指定命名空间。 | |
threshold | float | 向量召回最低分阈值。 | |
top_n | uint32 | 向量召回topN。 | |
search_params.qc_scan_ratio | float | 0.01 | QC索引查询时扫描文档数量比例,扫描的文档数=总文档数 * scan_ratio |
search_params.hnsw_ef | uint32 | 500 | HNSW索引查询时扫描的文档数,值越大,召回率越高,相应耗时越大。 |
vector_search参数在多路召回场景同样有效。
示例:查询64维的向量索引
vector: '0.377796,-0.958450,0.409853,-0.238177,-1.293826,0.356797,-0.295727,0.847301,-1.220337,0.148032,-1.128458,0.903187,0.509352,0.293686,-1.005852,-0.488839,0.888227,-0.555556,-0.658025,0.267552,-0.567601,0.003045,0.591734,-0.515983,-1.316453,-1.462450,0.091946,1.554954,0.384802,0.720498,0.144338,1.217826,0.724039,0.044212,0.571332,-1.425430,0.618965,0.481887,-1.617787,1.505416,-0.683652,1.030900,0.562021,0.162437,0.816546,0.112229,-0.739288,-0.342643,-0.199292,0.508368,-1.384887,-1.842170,0.952622,-1.699499,0.199430,-0.232464,-0.273227,-0.383696,-0.511302,0.005458,1.873572,-0.926169,-0.417587,-0.660156'使用示例
设定最低分阈值
功能说明:控制向量分值低于某个阈值时,不参与召回。
旧版参数格式:&sf=number
新版参数格式:vector_search={"vector_index":{"threshold":0.8}}
使用示例:
// 旧版
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&sf=0.8'
// 新版
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"threshold":0.8}}指定top n 查询
功能说明:指定向量检索返回的top结果数。
旧版参数格式:&n=number
新版参数格式:vector_search={"vector_index":{"top_n":10}}
使用示例:
// 旧版
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10'
// 新版
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"top_n":10}}获取向量得分排序
功能说明:通过在业务排序表达式中设置proxima_score(index_name) 获取向量距离分。
index_name:向量索引名称返回值类型float:向量距离,非向量召回的文档默认为10000。
示例:
proxima_score(your_vector_index)。
配置步骤:
在搜索算法中心 > 排序配置 > 策略配置页面,单击创建,设置应用范围为默认业务排序,类型选择表达式。
搜索测试页面引用,创建的业务排序策略进行测试。
在搜索测试页面中,通过设置参数 second_rank_name 引用已创建的业务排序策略,发起向量检索查询。可对比默认业务策略与自定义业务策略的搜索结果,排序公式结果均显示 SecondRank: expression[proxima_score(vec)], result[100.000000],表明向量距离分已生效。
系统默认使用欧式距离(l2)
内积距离(ip),向量得分越大,文档相关性越高
欧式距离(l2),向量得分越小,文档相关性越高
注意事项
系统默认在构建索引时的向量距离方式为欧式距离(l2),如需内积距离(ip),需要将内积距离的向量归一化后再传入引擎。
向量索引对应的字段必须为DOUBLE_ARRAY类型。
向量分词器目前支持的维度有64维、128维、256维、512维,每个维度对应的DOUBLE_ARRAY类型的字段中的元素也必须为64维、128维、256维、512维,必须精准对应。
向量索引的长度限制为编码前4K,一般一个query里面最多支持查询2个向量索引。
多模态向量检索
当向量索引的分析方式为多模态向量分析(如 qwen3_vl_embedding_2560d、ops_mm_embedding_ecom_001)时,可在查询中直接传入文本或图片,由查询分析自动改写为向量后完成检索。多模态查询支持单模态与多模态两种输入。
单模态查询:查询词为文本或图片URL。图片URL仅支持 http、https 协议。
# 文本查询
query=mm_vector:'连衣裙'
# 图片查询
query=mm_vector:'https://example.com/a.jpg'多模态查询:查询词为JSON字符串,同时包含文本与图片。建议使用单引号包裹JSON,若使用双引号则需转义。
query=mm_vector:'{"text":"连衣裙","image":"https://example.com/a.jpg"}'经查询分析改写后,上述查询均会转换为向量形式(如 mm_vector:'1.0,2.0,3.0')后再执行召回。
自定义主体识别区域:图搜场景下,可通过 object_location 参数指定主体识别的目标位置,格式为 x,y,width,height。该参数仅在图搜场景生效。
使用限制
单个应用的向量索引个数不能超过2个。
多模态向量索引的包含字段必须位于同一张数据源表中。
图片大小限制为15MB。
在线查询仅支持 http、https 输入;离线文档仍支持 http、https、oss、base64 输入。
相关错误码
多模态检索相关的错误码如下:
错误码 | 说明 |
6615 | 主体识别失败。 |
InvalidQP.InvalidVectorIndex | 查询分析配置中向量索引不合法。 |
Request.ExtendConfig.VectorIndexConfig.InvalidSourceField | 向量索引配置的来源字段不合法。 |
Request.ExtendConfig.VectorIndexConfig.SourceFieldNotSameTable | 来源字段不在同一张数据源表中。 |
Request.ExtendConfig.VectorIndexConfig.UnsupportedModality | 不支持的模态类型。 |