向量函数

向量函数允许您构建 VECTOR,计算向量对之间的相似度和距离,并计算向量的大小。

vector()

详细信息

语法

vector(vectorValue, dimension, coordinateType)

描述

构建一个 VECTOR 值。

参数

名称

类型

描述

vectorValue

STRING | LIST<INTEGER | FLOAT>

用于创建向量坐标的数值。

dimension

INTEGER(整数)

向量的维度(坐标数量)。

coordinateType

[INTEGER64, INTEGER32, INTEGER16, INTEGER8, FLOAT64, FLOAT32]

向量中每个坐标的类型。

返回

VECTOR

注意事项

VECTOR 值可以存储为属性

如果 vectorValue 中使用了 STRING,它必须以方括号 ([]) 开头和结尾。括号内的值必须是以逗号分隔的数字,且采用十进制或科学计数法表示。

nullNaNInfinity 值不能作为坐标值使用。

如果 vectorValue 包含不属于指定 coordinateType 的元素,它们将在可能的情况下被强制转换为该坐标类型。这包括在较大类型(例如 INTEGER64)无法放入指定类型(例如 FLOAT32)的情况下可能发生的有损转换。

dimension 必须大于 0 且小于或等于 4096

nullvectorValuedimension 将返回 null

示例 1. 构建一个 VECTOR
查询
RETURN vector([1, 2, 3], 3, INTEGER) AS vector
结果
向量 (vector)

vector([1, 2, 3], 3, INTEGER NOT NULL)

行:1

示例 2. 使用 STRING 作为 vectorValue 构建 VECTOR
查询
RETURN vector("[1.05000e+00, 0.123, 5]", 3, FLOAT) AS vector
结果
向量 (vector)

vector([1.05, 0.123, 5.0], 3, FLOAT NOT NULL)

行:1

示例 3. null
查询
RETURN vector(null, 3, FLOAT32) AS nullVectorValue,
       vector([1, 2, 3], null, INTEGER8) AS nullDimension
结果
nullVectorValue nullDimension

null

null

行:1

vector.similarity.cosine()

详细信息

语法

vector.similarity.cosine(a, b)

描述

返回一个 FLOAT,表示基于余弦算法的参数向量之间的相似度。

参数

名称

类型

描述

a

VECTOR | LIST<INTEGER | FLOAT>

表示第一个向量的向量或列表值。

b

VECTOR | LIST<INTEGER | FLOAT>

表示第二个向量的向量或列表值。

返回

FLOAT

注意事项

vector.similarity.cosine(null, null) 返回 null

vector.similarity.cosine(null, b) 返回 null

vector.similarity.cosine(a, null) 返回 null

两个向量必须具有相同的维度。

两个向量必须对于余弦相似度而言是有效的

其实现与最新的向量索引提供程序 (vector-2.0) 相同。

相似度得分范围为 01,得分越接近 1 表示相似度越高。

自 Neo4j 2025.10 起,输入参数 ab 支持 VECTOR 值。

浮点运算使用 float32 算术执行。

有关更多详细信息,请参阅向量索引文档

vector.similarity.euclidean()

详细信息

语法

vector.similarity.euclidean(a, b)

描述

返回一个 FLOAT,表示基于欧几里得距离算法的参数向量之间的相似度。

参数

名称

类型

描述

a

VECTOR | LIST<INTEGER | FLOAT>

表示第一个向量的向量或列表值。

b

VECTOR | LIST<INTEGER | FLOAT>

表示第二个向量的向量或列表值。

返回

FLOAT

注意事项

vector.similarity.euclidean(null, null) 返回 null

vector.similarity.euclidean(null, b) 返回 null

vector.similarity.euclidean(a, null) 返回 null

两个向量必须具有相同的维度。

两个向量必须对于欧几里得相似度而言是有效的

其实现与最新的可用向量索引提供程序 (vector-2.0) 相同。

相似度得分范围为 01,得分越接近 1 表示相似度越高。

自 Neo4j 2025.10 起,输入参数 ab 支持 VECTOR 值。

浮点运算使用 float32 算术执行。

有关更多详细信息,请参阅向量索引文档

示例 4. K-最近邻

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

(:Node {vector: vector([2.0, 8.0, 3.0], 3, FLOAT32 NOT NULL), id: 3})

0.043478261679410934

(:Node {vector: vector([1.0, 4.0, 2.0], 3, FLOAT32 NOT NULL), id: 1})

0.03703703731298447

行:2

vector_dimension_count()

详细信息

语法

vector_dimension_count(vector)

描述

返回 VECTOR 的维度。

参数

名称

类型

描述

向量 (vector)

VECTOR

要计算其维度的向量。

返回

INTEGER(整数)

您也可以使用 size() 函数来返回 VECTOR 值的维度。
示例 5. 计算 VECTOR 的大小
查询
RETURN vector_dimension_count(vector([1, 2, 3], 3, INTEGER8)) AS size
结果
size

3

行:1

vector_distance()

详细信息

语法

vector_distance(vector1, vector2, vectorDistanceMetric)

描述

返回一个 FLOAT,表示基于所选 vectorDistanceMetric 算法的两个向量值之间的距离。

参数

名称

类型

描述

vector1

VECTOR

第一个向量。

vector2

VECTOR

第二个向量。

vectorDistanceMetric

[EUCLIDEAN, EUCLIDEAN_SQUARED, MANHATTAN, COSINE, DOT, HAMMING]

用于计算距离的向量距离算法。

返回

FLOAT

支持的 vectorDistanceMetric 算法
距离类型 公式

EUCLIDEAN

√( (A₁ - B₁)² + (A₂ - B₂)² + …​ + (Aᴰ - Bᴰ)² )

EUCLIDEAN_SQUARED

(A₁ - B₁)² + (A₂ - B₂)² + …​ + (Aᴰ - Bᴰ)²

MANHATTAN

|A₁ - B₁| + |A₂ - B₂| + …​ + |Aᴰ - Bᴰ|

COSINE

1 - ( (A₁×B₁ + A₂×B₂ + …​ + Aᴰ×Bᴰ) / ( √(A₁² + A₂² + …​ + Aᴰ²) × √(B₁² + B₂² + …​ + Bᴰ²) ) )

DOT

- (A₁×B₁ + A₂×B₂ + …​ + Aᴰ×Bᴰ)

HAMMING

vector1vector2 不同的维度数量。

注意事项

返回的数字越小,向量越相似;数字越大,向量距离越远。这与相似度函数相反,相似度函数中结果越接近 1,相似程度越高。

浮点运算使用 float32 算术执行。

示例 6. 使用 COSINE 距离计算两个向量之间的距离
查询
RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([1, 2, 4], 3, INTEGER8), COSINE) AS distance
结果
距离

0.008539855480194092

行:1

示例 7. 使用 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)
结果
距离

5.248809337615967

行:1

vector_norm()

详细信息

语法

vector_norm(vector, vectorDistanceMetric)

描述

返回一个 FLOAT,表示给定向量与原点向量(即具有相同维度且所有坐标均为零的向量)之间的距离,计算时使用指定的 vectorDistanceMetric

参数

名称

类型

描述

向量 (vector)

VECTOR

要计算其与原点向量范数的向量。

vectorDistanceMetric

[EUCLIDEAN, MANHATTAN]

用于计算距离的向量距离算法。

返回

FLOAT

支持的 vectorDistanceMetric 算法
距离类型 公式

EUCLIDEAN

√( (A₁ - B₁)² + (A₂ - B₂)² + …​ + (Aᴰ - Bᴰ)² )

MANHATTAN

|A₁ - B₁| + |A₂ - B₂| + …​ + |Aᴰ - Bᴰ|

示例 8. 使用 EUCLIDEAN 距离测量向量与原点向量之间的范数
注意事项

浮点运算使用 float32 算术执行。

查询
RETURN vector_norm(vector([1.0, 5.0, 3.0, 6.7], 4, FLOAT32), EUCLIDEAN) AS norm
结果
norm

8.93812084197998

行:1

示例 9. 使用 EUCLIDEAN 距离测量向量与原点向量之间的范数
查询
RETURN vector_norm(vector([1.0, 5.0, 3.0, 6.7], 4, FLOAT32), MANHATTAN) AS norm
结果
norm

15.699999809265137

行:1

© . This site is unofficial and not affiliated with Neo4j, Inc.