为满足更加多元化和复杂的业务场景,开放搜索推出了向量检索功能。在特定业务场景下,特别是在教育搜题和图片搜索场景中,结合多路搜索功能可以显著提升搜索结果的准确性。本文将对向量索引的语法说明及其注意事项进行详细介绍。
语法说明
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()
函数获取向量得分进行排序。
配置步骤:
创建业务排序策略:
注:proxima_score函数的参数为向量索引名称。
搜索测试页面引用,创建的业务排序策略进行测试:
系统默认使用欧式距离(l2)。
内积距离(ip),向量得分越大,文档相关性越高。
欧式距离(l2),向量得分越小,文档相关性越高。
注意事项
系统默认在构建索引时的向量距离方式为欧式距离(l2),如需内积距离(ip),需要将内积距离的向量归一化后再传入引擎。
向量索引对应的字段必须为DOUBLE_ARRAY类型。
向量分词器目前支持的维度有64维、128维、256维、512维,每个维度对应的DOUBLE_ARRAY类型的字段中的元素也必须为64维、128维、256维、512维,必须精准对应。
向量索引的长度限制为编码前4K,一般一个query里面最多支持查询2个向量索引。