VADD
VADD key [REDUCE dim] (FP32 | VALUES num) vector element [CAS] [NOQUANT | Q8 | BIN] [EF build-exploration-factor] [SETATTR attributes] [M numlinks]
- 可用版本
- Redis Open Source 8.0.0
- 时间复杂度
- 添加每个元素的时间复杂度为 O(log(N)),其中 N 是向量集中的元素数量。
将新元素添加到由 key
指定的向量集中。向量可以作为 32 位浮点数 (FP32
) 的 blob 值提供,也可以作为浮点数字符串提供,前缀为元素数量(例如,下面的例子中为 3)。
VADD mykey VALUES 3 0.1 1.2 0.5 my-element
必需参数
key
是保存向量集数据的键名。
FP32 vector 或 VALUES num vector
32 位浮点数 (FP32) 的 blob 值,或者 num
个浮点数字符串。
element
是添加到向量集中的元素名称。
可选参数
REDUCE dim
通过随机投影降低向量维度。投影矩阵将与向量集一起保存和重新加载。请注意,REDUCE 选项必须紧接在向量之前传递。例如:
VADD mykey REDUCE 50 VALUES ...
CAS
以 check-and-set 方式部分使用线程执行操作。耗时的邻居候选集合过程在后台执行,而命令在主线程中执行。
NOQUANT
对于给定 key 的第一次 VADD 调用,NOQUANT 强制创建不使用 int8 量化的向量,否则 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
,零层将至少使用 1024 字节的内存。这是 M * 2
个连接乘以 8 字节(指针),即 128 * 8 = 1024
。对于更高层,请考虑以下情况:
- 平均每个节点出现在约 1.33 个层中(来自 HNSW 论文的经验观察),这意味着每个节点约有 0.33 个更高层。
- 这些更高层中的每个节点都有
M = 64
个连接。
因此,每个节点的额外内存约为 0.33 × 64 × 8 ≈ 169.6
字节,总内存约为 1193 字节。
如果您没有召回质量问题,默认值是可以接受的,并且使用的内存最少。
相关主题
RESP2 回复
以下之一:
RESP3 回复
以下之一: