函数原型
l2_distance(embeding_field, "query_embedding_string") :
embedding_field: 文档中embedding字段名称,类型为多值float类型,且需要设置为属性字段。
query_embedding_string:query中传入的查询embedding,形式为用逗号分割的字符串,如:"0.1,0.2,0.3"。
返回值:平方欧式距离,结果越小越相关,计算公式如下:
说明
embedding_field中的维数需要与query_embedding_string的维数相同,不相等时返回的距离为uint32_t::max()。
ip_distance :
embedding_field: 文档中embedding字段名称,类型为多值float类型,且需要设置为属性字段。
query_embedding_string:query中传入的查询embedding,形式为用逗号分割的字符串,如:"0.1,0.2,0.3"。
返回值:内积距离,结果越大越相关,计算公式如下:
说明
embedding_field中的维数需要与query_embedding_string的维数相同,不相等时返回的距离为0。
用法
sort子句
query=user:'1000'&&sort=ip_distance(embeddding,"0.1,0.2,0.3,0.4")
filter子句
query=user:'1000'&&filter=ip_distance(embeddding,"0.1,0.2,0.3,0.4") < 0.4
virtual_attribute
推荐在virtual_attribute中使用,这样得出的分数可以用于过滤,也可以用于排序。
query=title:"开放搜索"&&virtual_attribute=embedding_score:ip_distance(embeddding,"0.1,0.2,0.3,0.4")&&filter=embedding_score < 0.4&&kvpairs=formula:normalize(embedding_score)*0.3 + normalize(text_relevance(title))*0.7
query为查询title倒排索引。
virtual_attribute: 类似于变量定义,后续在filter和排序阶段都可以使用embedding_score来引用向量值。具体语法见:virtual attribute子句。
filter中过滤向量分低的文档,作用与向量查询的sf参数相同。
在formula中将向量分与文本分融合排序,可以使用normalize函数做归一化。
文档内容是否对您有帮助?