VADD

向向量集中添加一个或多个元素,或者更新其向量(如果已存在)

语法

VADD key [REDUCE dim] (FP32 | VALUES num) vector element [CAS] [NOQUANT | Q8 | BIN] [EF build-exploration-factor] [SETATTR attributes] [M numlinks]

引入版本:8.0.0

复杂度摘要:O(log(N)

将新元素添加到 key 指定的向量集中。该向量可以以 32 位浮点 (FP32) 值 blob 的形式提供,也可以以字符串形式的浮点数提供,并以元素数量为前缀(在下面的示例中为 3):

VADD mykey VALUES 3 0.1 1.2 0.5 my-element

必需参数

key

是将保存向量集数据的键的名称。

FP32 vector or VALUES num vector

32 位浮点 (FP32) blob 值或 num 浮点数作为字符串。使用 FP32 格式时,blob 必须使用小端编码。在具有不同字节顺序的平台上,您应该手动调整字节顺序或使用 VALUES 语法。

element

是要添加到向量集中的元素的名称。

可选参数

REDUCE dim

实现随机投影,降低向量的维数。投影矩阵与矢量集一起保存并重新加载。请注意,REDUCE 选项必须紧接在向量之前传递。例如,

VADD mykey REDUCE 50 VALUES ...
CAS

以检查和设置的方式部分使用线程执行操作。邻居候选集合在后台执行,速度较慢,而命令在主线程中执行。

NOQUANT

在给定键的第一次 VADD 调用中,NOQUANT 强制创建向量而不进行 int8 量化,否则这是默认值。

BIN

强制向量使用二进制量化而不是int8。这速度更快并且使用更少的内存,但会影响召回质量。

Q8

强制向量使用带符号的 8 位量化。这是默认设置,该选项的存在只是为了确保在插入时检查向量集是否具有相同的格式。

[!注意] NOQUANT、Q8 和 BIN 是互斥的。

EF build-exploration-factor

在将新节点连接到现有的分层可导航小世界 (HNSW) 图时,在寻找好的候选节点方面发挥作用。默认值为 200。使用较大的值可能有助于实现更好的召回率。为了提高召回率,还可以在 VSIM 搜索期间增加 EF。

SETATTR attributes

将 JavaScript 对象形式的属性关联到新创建的条目或更新属性(如果它们已经存在)。与单独调用VSETATTR命令相同。

M numlinks

是图的每个节点与其他节点的最大连接数。默认值为 16。更多连接意味着更多内存,但可以提供更高效的图形探索。零层节点(每个节点至少存在于零层)具有 M * 2 连接,而其他层仅具有 M 连接。例如,将 M 设置为 64 将为第 0 层使用至少 1024 字节的内存。这是 M * 2 连接乘以 8 字节(指针),或 128 * 8 = 1024。对于较高层,请考虑以下事项:

  • 每个节点平均出现在约 1.33 层中(来自 HNSW 论文的经验观察),计算出每个节点有 0.33 个更高的层。
  • 每个较高层都有 M = 64 连接。

因此,每个节点额外的内存量约为 0.33 × 64 × 8 ≈ 169.6 字节,使总内存达到约 1193 字节。

如果没有召回质量问题,默认是可以接受的,并且使用最少的内存。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
❌主动-主动
✅ 标准
❌主动-主动

返回值

RESP2

以下之一: * 整数回复:如果添加了键,则为 1;如果未添加键,则为 0。 * 简单错误回复:如果命令格式错误。

RESP3

以下之一: * 布尔回复:如果添加了键,则为 true;如果未添加键,则返回 false。 * 简单错误回复:如果命令格式错误。

资料来源:Redis 官方 VADD 文档;中文内容参考 Redis 文档许可。