inner_product()¶
函数说明¶
INNER_PRODUCT(vector1, vector2) 返回两个向量的负点积,即 -(vector1 · vector2)。两个向量必须具有相同的维度。
函数语法¶
SELECT inner_product(vector1, vector2) AS result FROM table_name;
示例¶
drop table if exists vec_table;
create table vec_table(a int, b vecf32(3), c vecf64(3));
insert into vec_table values(1, "[1,2,3]", "[4,5,6]");
mysql> select * from vec_table;
+------+-----------+-----------+
| a | b | c |
+------+-----------+-----------+
| 1 | [1, 2, 3] | [4, 5, 6] |
+------+-----------+-----------+
1 row in set (0.00 sec)
mysql> select inner_product(b,"[1,2,3]") from vec_table;
+---------------------------+
| inner_product(b, [1,2,3]) |
+---------------------------+
| -14 |
+---------------------------+
1 row in set (0.00 sec)
限制¶
两个参数向量必须具有相同的维度。
符号与排序¶
当前 MOI 后端的 INNER_PRODUCT(a, b) 返回负点积,即 -(a · b)。例如 [1,2,3] 与 [4,5,6] 的数学点积是 32,函数返回 -32;同一个向量 [1,2,3] 与自身计算得到 -14。
先在目标实例运行以下只读查询,确认当前后端版本的符号:
SELECT INNER_PRODUCT('[1,2,3]', '[4,5,6]') AS negative_dot_product,
INNER_PRODUCT('[1,2,3]', '[1,2,3]') AS self_negative_dot_product;
按上述负点积语义,两个结果分别为 -32 和 -14。按内积检索相似向量时,使用 ORDER BY INNER_PRODUCT(vector_column, query_vector) ASC:数学点积越大,负点积越小。需要数学点积时使用 -INNER_PRODUCT(a, b)。
更换后端版本后,重新运行常量查询再确定排序方向。若结果为正数,则该实例的函数符号不同,不能直接套用上述 ASC 排序。
最后更新于