TairVector是Tair自研的扩展数据结构,提供高性能、实时,集存储、检索于一体的向量数据库服务。
TairVector简介

- HNSW:以图结构构建向量检索的索引,在保证较高查询精度的同时,也可以均衡实时更新的性能表现。
- 暴力搜索:具有100%查询精度,插入数据速度快,适用于小规模数据集。
- 所有数据均在内存中,支持实时更新索引,具有更短的读写时延。
- 优化内存数据结构,占用空间更小。
- 开箱即用,以云服务的方式整体申请即可使用,整体架构简单高效,没有复杂组件依赖。
- 2022年10月13日随Tair内存型(兼容Redis 6.0)首次发布TairVector。
- 2022年11月22日发布6.2.2.0版本,新增支持Jaccard距离函数、TVS.GETINDEX命令支持统计每个索引的内存占用(
index_data_size
和attribute_data_size
)。 - 2022年12月26日发布6.2.3.0版本,支持集群代理模式,新增FLOAT16的向量数据类型,新增TVS.MINDEXKNNSEARCH、TVS.MINDEXMKNNSEARCH命令。
最佳实践
前提条件
注意事项
- 操作对象为Tair实例中的TairVector数据。
- TairVector暂不支持TTL(Time To Live)、
EXPIRE
、MOVE
等特性。
命令列表
类型 | 命令 | 语法 | 说明 |
---|---|---|---|
索引元数据操作 | TVS.CREATEINDEX | TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ... | 创建一个向量索引空间,同时指定构建索引和查询的具体算法,以及距离函数。该对象仅能通过 |
TVS.GETINDEX | TVS.GETINDEX index_name | 查询指定的向量索引,获取该向量索引的元数据信息。 | |
TVS.DELINDEX | TVS.DELINDEX index_name | 删除指定的向量索引及该索引内的所有数据。 | |
TVS.SCANINDEX | TVS.SCANINDEX cursor [MATCH pattern] [COUNT count] | 扫描Tair实例中所有符合条件的向量索引。 | |
向量数据操作 | TVS.HSET | TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ... | 往向量索引中插入数据记录(key),若该记录已存在则更新并覆盖原记录。 |
TVS.HGETALL | TVS.HGETALL index_name key | 查询指定向量索引中的key对应的所有数据记录。 | |
TVS.HMGET | TVS.HMGET index_name key attribute_key [attribute_key ...] | 查询指定向量索引的key中对应的attribute_key所对应的数值。 | |
TVS.DEL | TVS.DEL index_name key [key ...] | 在指定向量索引中,删除指定数据记录(key)。 | |
TVS.HDEL | TVS.HDEL index_name key attribute_key [attribute_key ...] | 在向量索引的数据记录(key)中,删除指定的attribute_key与其数值。 | |
TVS.SCAN | TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] | 在指定向量索引中,扫描符合条件的数据记录(key)。 | |
向量近邻查询 | TVS.KNNSEARCH | TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value] | 在指定向量索引中,对指定的向量(VECTOR)进行近邻查询,最多可返回topN条。 |
TVS.MKNNSEARCH | TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value] | 在指定向量索引中,批量对多条向量(VECTOR)进行近邻查询。 | |
TVS.MINDEXKNNSEARCH | TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value] | 在多个向量索引中,对指定的向量(VECTOR)进行近邻查询。 | |
TVS.MINDEXMKNNSEARCH | TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value] | 在多个向量索引中,批量对多条向量(VECTOR)进行近邻查询。 |
大写关键字
:命令关键字。斜体
:变量。[options]
:可选参数,不在括号中的参数为必选。A|B
:该组参数互斥,请进行二选一或多选一。...
:前面的内容可重复。
TVS.CREATEINDEX
类别 | 说明 |
---|---|
语法 | TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ... |
时间复杂度 | O(1) |
命令描述 | 创建一个向量索引空间,同时指定构建索引和查询的具体算法,以及距离函数。该对象仅能通过 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例均为如下:
|
TVS.GETINDEX
类别 | 说明 |
---|---|
语法 | TVS.GETINDEX index_name |
时间复杂度 | O(1) |
命令描述 | 查询指定的向量索引,获取该向量索引的元数据信息。 |
选项 |
|
返回值 |
|
示例 | 请提前执行如下命令:
命令示例(以HNSW算法的向量索引为例):
返回示例:
|
TVS.DELINDEX
类别 | 说明 |
---|---|
语法 | TVS.DELINDEX index_name |
时间复杂度 | O(N),N为该向量索引中Key的数量。 |
命令描述 | 删除指定的向量索引及该索引内的所有数据。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.SCANINDEX
类别 | 说明 |
---|---|
语法 | TVS.SCANINDEX cursor [MATCH pattern] [COUNT count] |
时间复杂度 | O(N),N为Tair实例中向量索引数量。 |
命令描述 | 扫描Tair实例中所有符合条件的向量索引。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HSET
类别 | 说明 |
---|---|
语法 | TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ... |
时间复杂度 | 若本次插入、更新数据无需创建索引,则时间复杂度为O(1);否则时间复杂度为O(log(N)),N为该向量索引中Key的数量。 |
命令描述 | 往向量索引中插入数据记录(key),若该记录已存在则更新并覆盖原记录。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HGETALL
类别 | 说明 |
---|---|
语法 | TVS.HGETALL index_name key |
时间复杂度 | O(1) |
命令描述 | 查询指定向量索引中的key对应的所有数据记录。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HMGET
类别 | 说明 |
---|---|
语法 | TVS.HMGET index_name key attribute_key [attribute_key ...] |
时间复杂度 | O(1) |
命令描述 | 查询指定向量索引的key中对应的attribute_key所对应的数值。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.DEL
类别 | 说明 |
---|---|
语法 | TVS.DEL index_name key [key ...] |
时间复杂度 | O(1) |
命令描述 | 在指定向量索引中,删除指定数据记录(key)。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HDEL
类别 | 说明 |
---|---|
语法 | TVS.HDEL index_name key attribute_key [attribute_key ...] |
时间复杂度 | O(1) |
命令描述 | 在向量索引的数据记录(key)中,删除指定的attribute_key与其数值。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.SCAN
类别 | 说明 |
---|---|
语法 | TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] |
时间复杂度 | O(N),N为该向量索引中Key的数量。 |
命令描述 | 在指定向量索引中,扫描符合条件的数据记录(key)。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.KNNSEARCH
类别 | 说明 |
---|---|
语法 | TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value] |
时间复杂度 | O(log(N)),N为该向量索引中Key的数量。 |
命令描述 | 在指定向量索引中,对指定的向量(VECTOR)进行近邻查询,最多可返回topN条。 |
选项 |
|
返回值 |
|
示例 | 请提前执行如下命令:
命令示例:
返回示例:
|
TVS.MKNNSEARCH
类别 | 说明 |
---|---|
语法 | TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value] |
时间复杂度 | Vector_count * O(log(N)),N为该向量索引中Key的数量。 |
命令描述 | 在指定向量索引中,批量对多条向量(VECTOR)进行近邻查询。 |
选项 |
|
返回值 |
|
示例 | 请提前执行如下命令:
命令示例:
返回示例:
|
TVS.MINDEXKNNSEARCH
类别 | 说明 |
---|---|
语法 | TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value] |
时间复杂度 | Index_count * O(log(N)),N为该向量索引中Key的数量。 |
命令描述 | 在多个向量索引中,对指定的向量(VECTOR)进行近邻查询。 |
选项 |
|
返回值 |
|
示例 | 请提前执行如下命令:
命令示例:
返回示例:
|
TVS.MINDEXMKNNSEARCH
类别 | 说明 |
---|---|
语法 | TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value] |
时间复杂度 | Index_count * O(log(N)),N为该向量索引中Key的数量。 |
命令描述 | 在多个向量索引中,批量对多条向量(VECTOR)进行近邻查询。 |
选项 |
|
返回值 |
|
示例 | 请提前执行如下命令:
命令示例:
返回示例:
|