# Vector_set命令

# VADD

# 语法

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

# 描述

向由键指定的向量集中添加一个新元素。向量数据可以以 32位浮点数的二进制数据块形式提供,也可以以字符串形式的浮点数提供

# 参数

  • key

用于存储向量集数据的键的名称

  • FP32 vector or VALUES num vector

可以是 32位浮点数(FP32)的二进制数据块,也可以是 num 个以字符串形式表示的浮点数。使用 FP32 格式时,数据块必须采用小端序编码。如果在不同字节序的平台上,应手动调整字节顺序,或者改用 VALUES 语法

  • element

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

  • CAS

该操作会部分使用多线程执行,采用的是检查并设置的模式。其中耗时较长的邻居候选集收集工作会在后台进行,而命令的执行则在主线程中完成

  • NOQUANT

在对指定key的首次 VADD 调用中,NOQUANT 参数会强制创建不使用 int8 量化的向量;如果不加该参数,系统默认会进行 int8 量化

  • BIN

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

  • Q8

强制向量使用有符号 8位量化。这是系统的默认设置,提供这个选项仅仅是为了确保在插入数据时,能够校验该向量集是否使用了相同的格式

  • EF build-exploration-factor

该参数在将新节点连接到现有的分层可导航小世界(HNSW)图时,对于寻找优质候选节点起着关键作用。其默认值为 200。使用更大的值可能有助于获得更好的召回率。此外,在执行 VSIM(向量相似度)搜索时,也可以通过增大 EF 参数来进一步提升召回率

  • SETATTR attributes

以 JavaScript 对象的形式,将属性关联到新创建的条目上,或者更新已有的属性。其效果与单独调用 VSETATTR 命令相同


# VCARD

# 语法

VCARD key

# 描述

返回指定向量集中的元素数量

# 参数

  • key

用于存储向量集数据的键的名称


# VDIM

# 语法

VDIM key

# 描述

返回指定向量集中向量的维度数

# 参数

  • key

用于存储向量集数据的键的名称


# VEMB

# 语法

VEMB key element [RAW]

# 描述

返回向量集中与指定元素关联的近似向量

# 参数

  • key

用于存储向量集数据的键的名称

  • element

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

  • RAW

返回原始的向量数据、量化类型,以及诸如范数和范围等元数据

# 示例

VEMB word_embeddings SQL
1) "0.18208661675453186"
2) "0.08535309880971909"
3) "0.1365649551153183"
4) "-0.16501599550247192"
5) "0.14225517213344574"
... 295 more elements ...

VEMB word_embeddings apple RAW
1) int8
2) "\xf1\xdc\xfd\x1e\xcc%E...\xde\x1f\xfbN" # artificially shortened for this example
3) "3.1426539421081543"
4) "0.17898885905742645"

# VGETATTR

# 语法

VGETATTR key element

# 描述

返回向量集中与某个元素关联的 JSON 属性

# 参数

  • key

用于存储向量集数据的键的名称

  • element

想要检索其属性的那个元素的名称


# VINFO

# 语法

VINFO key

# 描述

返回关于向量集的元数据和内部详情,包括大小(元素数量)、维度、量化类型以及图结构

# 参数

  • key

用于存储向量集数据的键的名称

# 示例

VINFO word_embeddings
1) quant-type
2) int8
3) vector-dim
4) (integer) 300
5) size
6) (integer) 3000000
7) max-level
8) (integer) 12
9) vset-uid
10) (integer) 1
11) hnsw-max-node-uid
12) (integer) 3000000

# VISMEMBER

# 语法

VISMEMBER key element

# 描述

检查某个元素是否存在于向量集中

# 参数

  • key

用于存储向量集数据的键的名称

  • element

想要检索其属性的那个元素的名称


# 语法

VLINKS key element [WITHSCORES]

# 描述

返回向量集中指定元素的邻居节点。该命令会展示 HNSW 图每一层中的连接关系

# 参数

  • key

用于存储向量集数据的键的名称

  • element

想要检索其属性的那个元素的名称

  • WITHSCORES

包含每个邻居节点的相似度分数


# VRANDMEMBER

# 语法

VRANDMEMBER key [count]

# 描述

从向量集中随机获取一个或多个元素

# 参数

  • count

指定要返回的元素数量。正数值表示返回不重复的元素;负数值则允许返回重复元素

  • key

用于存储向量集数据的键的名称

# 示例

> VRANDMEMBER
<!-- TODO: 填写示例输出 -->

# VRANGE

# 语法

VRANGE key start end [count]

# 描述

VRANGE 命令为向量集内的元素提供了一个无状态迭代器。它允许你在每次调用时以较小的批次检索向量集中的所有元素,且无需显式的游标

# 参数

  • key

用于存储向量集数据的键的名称

  • start

    字典序范围的起始点。它可以是:

    • 以 [ 为前缀的字符串,表示闭区间
    • 以 ( 为前缀的字符串,表示开区间(不包含该值,例如 (a7)
    • 使用特殊符号 - 来表示最小元素
  • end

    字典序范围的结束点。它可以是:

    • 以 [ 为前缀的字符串,表示闭区间
    • 以 ( 为前缀的字符串,表示开区间
    • 使用特殊符号 + 来表示最大元素
  • count

指定要返回的元素数量。正数值表示返回不重复的元素;负数值则允许返回重复元素

# 示例

VRANGE word_embeddings [Redis + 10

VRANGE mykey - + 10

VRANGE mykey (a7 + 10

VRANGE mykey - + -1

# VREM

# 语法

VREM key element

# 描述

从向量集中移除一个元素

# 参数

  • key

用于存储向量集数据的键的名称

  • element

想要检索其属性的那个元素的名称

# 示例

VADD vset VALUES 3 1 0 1 bar
(integer) 1

VREM vset bar
(integer) 1

VREM vset bar
(integer) 0


# VSETATTR

# 语法

VSETATTR key element "{ JSON obj }"

# 描述

将 JSON 对象与向量集中的元素进行关联。请使用此命令来存储属性,以便在 VSIM 中进行带过滤条件的相似度搜索

# 参数

  • key

用于存储向量集数据的键的名称

  • element

想要检索其属性的那个元素的名称

  • JSON

必须是有效的 JSON 字符串。如果要删除这些属性,请使用空字符串("")

# 示例

VSETATTR key element "{\"type\": \"fruit\", \"color\": \"red\"}"

VSETATTR key element ""


# VSIM

# 语法

VSIM key (ELE | FP32 | VALUES num) (vector | element) [WITHSCORES] [WITHATTRIBS] [COUNT num]
  [EPSILON delta] [EF search-exploration-factor] [FILTER expression] [FILTER-EF max-filtering-effort]
  [TRUTH] [NOTHREAD]```

#### 描述

返回与给定向量或元素相似的元素。使用此命令可在向量集中执行近似或精确相似度搜索

#### 参数

- **key**

用于存储向量集数据的键的名称

- **element**

想要检索其属性的那个元素的名称

- **ELE | FP32 | VALUES num**

用于指定输入向量的提供方式。可使用 ELE 来引用一个已有的元素;使用 FP32 表示二进制浮点格式;或使用 VALUES num 来表示由浮点数值字符串组成的列表

- **WITHSCORES**

包含每个邻居节点的相似度分数

- **COUNT num**

将返回的结果数量限制为 num

- **EPSILON delta**

这是一个介于 01 之间的浮点数,用于检索与目标向量距离不超过指定 delta 值的元素。
在向量集合中,返回的元素会带有一个相似度分数(与查询向量相比),该分数在 01 之间:1 表示完全相同,0 表示完全相反(或毫无关联)。
举个例子,如果将 EPSILON 选项的值设为 0.2,就意味着只有相似度达到 0.8 及以上(即距离小于 0.2)的元素才会被返回。
这个参数非常实用:当你设置了一个较大的 COUNT(返回数量),但又不想返回那些与查询向量相差太远的结果时,就可以用它来做兜底过滤

- **EF search-exploration-factor**

用于控制搜索时的计算开销(或搜索力度)。该值越高,算法探索的节点就越多,从而提升召回率,但代价是搜索速度会变慢。通常的取值范围在 501000 之间

- **FILTER expression**

应用一个过滤表达式来限制匹配的元素

- **FILTER-EF max-filtering-effort**

限制对过滤表达式的尝试匹配次数

- **TRUTH**

强制对所有元素进行精确的线性扫描,并绕过 HNSW 图索引。通常用于基准测试(benchmarking)或计算召回率(recall)。该操作的速度会显著变慢,时间复杂度为 O(N)

- **NOTHREAD**

在主线程中执行搜索。适用于小规模向量集或基准测试。请注意,执行期间这可能会导致服务器阻塞


#### 示例

```bash
VSIM word_embeddings ELE apple
1) "apple"
2) "apples"
3) "pear"
4) "fruit"
5) "berry"
6) "pears"
7) "strawberry"
8) "peach"
9) "potato"
10) "grape"

VSIM word_embeddings ELE apple WITHSCORES WITHATTRIBS COUNT 3
1) "apple"
2) "0.9998867657923256"
3) "{\"len\": 5}"
4) "apples"
5) "0.859852746129036"
6) "{\"len\": 6}"
7) "pear"
8) "0.8226882070302963"
9) "{\"len\": 4}"