向量函数
向量函数允许您构建 VECTOR 值,计算向量对之间的相似度和距离,并计算向量的大小。
vector()仅限 Cypher 25Neo4j 2025.10 引入
语法 |
|
||
描述 |
构建一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
用于创建向量坐标的数值。 |
|
|
|
向量的维度(坐标数量)。 |
|
|
|
向量中每个坐标的类型。 |
|
返回 |
|||
|
如果 |
|
如果 |
|
|
VECTOR 值RETURN vector([1, 2, 3], 3, INTEGER) AS vector
| 向量 (vector) |
|---|
|
行:1 |
STRING 作为 vectorValue 构建 VECTOR 值RETURN vector("[1.05000e+00, 0.123, 5]", 3, FLOAT) AS vector
| 向量 (vector) |
|---|
|
行:1 |
null 值RETURN vector(null, 3, FLOAT32) AS nullVectorValue,
vector([1, 2, 3], null, INTEGER8) AS nullDimension
| nullVectorValue | nullDimension |
|---|---|
|
|
行:1 |
|
vector.similarity.cosine()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
表示第一个向量的向量或列表值。 |
|
|
|
表示第二个向量的向量或列表值。 |
|
返回 |
|
||
|
|
|
两个向量必须具有相同的维度。 |
两个向量必须对于余弦相似度而言是有效的。 |
其实现与最新的向量索引提供程序 ( |
相似度得分范围为 |
自 Neo4j 2025.10 起,输入参数 |
浮点运算使用 |
有关更多详细信息,请参阅向量索引文档。
vector.similarity.euclidean()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
表示第一个向量的向量或列表值。 |
|
|
|
表示第二个向量的向量或列表值。 |
|
返回 |
|
||
|
|
|
两个向量必须具有相同的维度。 |
两个向量必须对于欧几里得相似度而言是有效的。 |
其实现与最新的可用向量索引提供程序 ( |
相似度得分范围为 |
自 Neo4j 2025.10 起,输入参数 |
浮点运算使用 |
有关更多详细信息,请参阅向量索引文档。
k-最近邻查询通过比较关联向量与查询向量,返回相似度得分最高的 k 个实体。此类查询可以以近似 k-最近邻 (k-ANN) 查询的形式针对向量索引运行,返回的实体有很大概率属于真实的 k 个最近邻。不过,它们也可以使用向量相似度函数直接表示为穷举搜索。虽然这通常比使用索引慢得多,但它是精确的而非近似的,并且不需要现有的索引。这对于小型数据集上的临时查询非常有用。
要创建本示例中使用的图形,请在空的 Neo4j 数据库上运行以下查询
CREATE
(:Node { id: 1, vector: vector([1.0, 4.0, 2.0], 3, FLOAT32) }),
(:Node { id: 2, vector: vector([3.0, -2.0, 1.0], 3, FLOAT32) }),
(:Node { id: 3, vector: vector([2.0, 8.0, 3.0], 3, FLOAT32) });
给定参数 query(此处设置为 [4.0, 5.0, 6.0]),您可以查询欧几里得距离最近的两个邻居。这是通过匹配所有候选向量并按相似度得分排序来实现的
MATCH (node:Node)
WITH node, vector.similarity.euclidean($query, node.vector) AS score
RETURN node, score
ORDER BY score DESCENDING
LIMIT 2
这将返回最近的两个邻居。
| 节点 | score |
|---|---|
|
|
|
|
行:2 |
|
vector_dimension_count()仅限 Cypher 25Neo4j 2025.10 引入
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要计算其维度的向量。 |
|
返回 |
|
||
您也可以使用 size() 函数来返回 VECTOR 值的维度。 |
VECTOR 的大小RETURN vector_dimension_count(vector([1, 2, 3], 3, INTEGER8)) AS size
| size |
|---|
|
行:1 |
vector_distance()仅限 Cypher 25Neo4j 2025.10 引入
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
第一个向量。 |
|
|
|
第二个向量。 |
|
|
|
用于计算距离的向量距离算法。 |
|
返回 |
|
||
| 距离类型 | 公式 |
|---|---|
|
√( (A₁ - B₁)² + (A₂ - B₂)² + … + (Aᴰ - Bᴰ)² ) |
|
(A₁ - B₁)² + (A₂ - B₂)² + … + (Aᴰ - Bᴰ)² |
|
|A₁ - B₁| + |A₂ - B₂| + … + |Aᴰ - Bᴰ| |
|
1 - ( (A₁×B₁ + A₂×B₂ + … + Aᴰ×Bᴰ) / ( √(A₁² + A₂² + … + Aᴰ²) × √(B₁² + B₂² + … + Bᴰ²) ) ) |
|
- (A₁×B₁ + A₂×B₂ + … + Aᴰ×Bᴰ) |
|
|
返回的数字越小,向量越相似;数字越大,向量距离越远。这与相似度函数相反,相似度函数中结果越接近 |
浮点运算使用 |
COSINE 距离计算两个向量之间的距离RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([1, 2, 4], 3, INTEGER8), COSINE) AS distance
| 距离 |
|---|
|
行:1 |
EUCLIDEAN 距离计算两个向量之间的距离RETURN vector_distance(vector([1.0, 5.0, 3.0, 6.7], 4, FLOAT32), vector([5.0, 2.5, 3.1, 9.0], 4, FLOAT32), EUCLIDEAN)
| 距离 |
|---|
|
行:1 |
vector_norm()仅限 Cypher 25Neo4j 2025.20 引入
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要计算其与原点向量范数的向量。 |
|
|
|
用于计算距离的向量距离算法。 |
|
返回 |
|
||
| 距离类型 | 公式 |
|---|---|
|
√( (A₁ - B₁)² + (A₂ - B₂)² + … + (Aᴰ - Bᴰ)² ) |
|
|A₁ - B₁| + |A₂ - B₂| + … + |Aᴰ - Bᴰ| |
EUCLIDEAN 距离测量向量与原点向量之间的范数浮点运算使用 |
RETURN vector_norm(vector([1.0, 5.0, 3.0, 6.7], 4, FLOAT32), EUCLIDEAN) AS norm
| norm |
|---|
|
行:1 |
EUCLIDEAN 距离测量向量与原点向量之间的范数RETURN vector_norm(vector([1.0, 5.0, 3.0, 6.7], 4, FLOAT32), MANHATTAN) AS norm
| norm |
|---|
|
行:1 |