Redis for AI
Redis存储和索引语义上表示非结构化数据(包括文本通道、图像、视频或音频)的向量嵌入。将向量和关联的元数据存储在哈希或JSON文档中,用于索引和查询。
Redis包括一个高性能向量数据库,允许您对向量嵌入执行语义搜索。可以通过过滤文本、数字、地理空间和标记元数据来增强这些搜索。
- 创建向量索引:Redis使用定义的模式(包括向量字段和元数据)维护数据的二级索引。Redis支持FLAT和HNSW向量索引类型。
- 存储和更新向量:Redis将向量和元数据存储在哈希或JSON对象中。
- 使用向量搜索:Redis支持几种具有向量字段的高级查询策略,包括k-最近邻(KNN)、向量范围查询和元数据过滤器。
- 在运行时配置向量查询。
- 向量搜索示例:探索几个涵盖不同用例和技术的向量搜索示例。
一、创建向量索引
定义索引的模式时,可以包括一个或多个向量字段,如下所示:
Syntax
FT.CREATE <index_name>
ON <storage_type>
PREFIX 1 <key_prefix>
SCHEMA ... <field_name> VECTOR <algorithm> <index_attribute_count> <index_attribute_name> <index_attribute_value>
[<index_attribute_name> <index_attribute_value> ...]
Parameters
Parameter | Description |
---|---|
index_name | Name of the index. |
storage_type | Storage option (HASH or JSON ). |
prefix (optional) | Key prefix used to select which keys should be indexed. Defaults to all keys if omitted. |
field_name | Name of the vector field. |
algorithm | Vector index algorithm (FLAT or HNSW ). |
index_attribute_count | Number of vector field attributes. |
index_attribute_name | Vector field attribute name. |
index_attribute_value | Vector field attribute value. |
二、FLAT index
当数据集较小(<1M向量)或完美的搜索精度比搜索延迟更重要时,请选择FLAT索引。
1、必需的属性
Attribute | Description |
---|---|
TYPE | Vector type (BFLOAT16 , FLOAT16 , FLOAT32 , FLOAT64 ). BFLOAT16 and FLOAT16 require v2.10 or later. |
DIM | 存储在此字段中的向量嵌入的宽度或维数。换句话说,组成向量的浮点元素的数量。DIM必须是正整数。用于查询该字段的向量必须具有与字段本身相同的维度。 |
DISTANCE_METRIC | Distance metric (L2 , IP , COSINE ). |
FT.CREATE documents
ON HASH
PREFIX 1 docs:
SCHEMA doc_embedding VECTOR FLAT 6
TYPE FLOAT32
DIM 1536
DISTANCE_METRIC COSINE
在上面的示例中,通过哈希创建名为documents的索引,关键字前缀为docs:,名为doc_embedding的FLAT向量字段具有三个索引属性:TYPE、DIM和DISTANCE_METRIC。
三、HNSW index
HNSW或分层可导航小世界(hierarchical navigable small world)是一种近似最近邻算法,它使用多层图使向量搜索更具可扩展性。
- 最底层包含所有数据点,每个更高层包含一个子集,形成层次结构。
- 在运行时,搜索从上到下遍历每个层上的图,在放到下一层之前找到局部极小值。
当您有更大的数据集(>1M个文档)时,或者当搜索性能和可扩展性比完美的搜索准确性更重要时,请选择HNSW索引类型。
1、必需的属性
Attribute | Description |
---|---|
TYPE | Vector type (BFLOAT16 , FLOAT16 , FLOAT32 , FLOAT64 ). BFLOAT16 and FLOAT16 require v2.10 or later. |
DIM | 存储在此字段中的向量嵌入的宽度或维数。换句话说,组成向量的浮点元素的数量。DIM必须是正整数。用于查询该字段的向量必须具有与字段本身相同的维度。 |
DISTANCE_METRIC | Distance metric (L2 , IP , COSINE ). |
2、可选属性
HNSW支持许多额外的参数来调整查询的准确性,同时权衡性能。
Attribute | Description |
---|---|
M | 图形层中每个节点的最大传出边(连接)数。在层零上,最大连接数将为2*M。更高的值会增加准确性,但也会增加内存使用量和索引构建时间。默认值为16。 |
EF_CONSTRUCTION | 在图构建期间要考虑的最大连接邻居数。较高的值会增加准确性,但也会增加索引构建时间。默认值为200。 |
EF_RUNTIME | KNN搜索期间的最大热门候选。较高的值可以提高准确性,但也会增加搜索延迟。默认值为10。 |
EPSILON | 设置范围查询可以在其中搜索候选对象的边界的相对因子。也就是说,与查询向量的距离为radius*(1+EPSILON)的向量候选可能会被扫描,从而允许更广泛的搜索和更准确的结果,但代价是运行时。默认值为0.01。 |
FT.CREATE documents
ON HASH
PREFIX 1 docs:
SCHEMA doc_embedding VECTOR HNSW 10
TYPE FLOAT64
DIM 1536
DISTANCE_METRIC COSINE
M 40
EF_CONSTRUCTION 250
在上面的示例中,通过哈希创建名为documents的索引,关键字前缀为docs:,名为doc_embedding的HNSW向量字段具有五个索引属性:TYPE、DIM、DISTANCE_METRIC、M和EF_CONSTRUCTION。