接口定义
create_collection()用于为已创建的 Base 类向量数据库创建 Collection。
def create_collection(self,name: str,shard: int,replicas: int,description: str = None,index: Index = None,embedding: Embedding = None,timeout: float = None,) -> Collection:
使用示例
说明:
当前版本一个数据库实例下,不支持创建同名的 Collection。
不做过滤查询、检索的标量字段不必建立 Filter 索引。切勿将所有标量字段建立索引,导致内存资源的浪费。
插入数据时动态增加的标量字段暂不支持创建索引。创建 Collection 时,需规划好 Filter 索引的字段。
在 Base 类数据库 db-test 下,创建一个名为 book-vector 的集合,不配置 Embedding 模型相关参数,写入3维向量数据。
import tcvectordbfrom tcvectordb.model.enum import FieldType, IndexType, MetricTypefrom tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams, SparseVector, SparseIndexdb = client.database('db-test')# -- index configindex = Index(FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),FilterIndex(name='author', field_type=FieldType.String, index_type=IndexType.FILTER),FilterIndex(name='bookName', field_type=FieldType.String, index_type=IndexType.FILTER),FilterIndex(name='tags', field_type=FieldType.Array, index_type=IndexType.FILTER),VectorIndex(name='vector', dimension=3, index_type=IndexType.HNSW,metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)),SparseIndex(name='sparse_vector',field_type=FieldType.SparseVector,index_type=IndexType.SPARSE_INVERTED,metric_type=MetricType.IP))# create a collectioncoll = db.create_collection(name='book-vector-1012',shard=1,replicas=0,description='this is a collection of test vector',index=index)print(vars(coll))
在 Base 类数据库 db-test 下,创建一个名为 book-emb 的集合 ,配置 Embedding 模型相关参数,写入原始文本。Embedding 模型自动将原始文本进行向量化。
import tcvectordbfrom tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModelfrom tcvectordb.model.collection import Embeddingfrom tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams, SparseVectordb = client.database('db-test')# -- index configindex = Index(FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),VectorIndex(name='vector', dimension=768, index_type=IndexType.HNSW,metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)),FilterIndex(name='author', field_type=FieldType.String, index_type=IndexType.FILTER),FilterIndex(name='tags', field_type=FieldType.Array, index_type=IndexType.FILTER),FilterIndex(name='bookName', field_type=FieldType.String, index_type=IndexType.FILTER))# Embedding configebd = Embedding(vector_field='vector', field='text', model=EmbeddingModel.BGE_BASE_ZH)# create a collectioncoll = db.create_collection(name='book-emb-1012',shard=1,replicas=0,description='this is a collection of test embedding',embedding=ebd,index=index)print(vars(coll))
入参描述
创建集合之前,需要创建主键索引、向量索引、标量索引、稀疏向量索引。
Index 参数
参数名 | 子参数 | 是否必选 | 参数配置 |
FilterIndex | name | 否 | 配置可作为 Filter 索引的自定义扩展的标量字段名。 说明: Filter 索引(Filter Index)对标量字段建立的索引。标量字段名称、类型均由用户自定义,不限制标量字段数量. 标量字段被建立 Filter 索引之后,向量检索时,将依据 Filter 指定的标量字段的条件表达式进行过滤查询和范围查询以此来匹配相似向量。 建立 Filter 索引时,选取需要使用 Filter 表达式高效过滤数据的标量字段。不做过滤查询、检索的标量字段不必建立 Filter 索引。切勿将所有标量字段建立索引,导致内存资源的浪费。 必须构建唯一的 Document id 为主键的 Filter 索引,配置 name 固定为 id 。 配置其他自定义扩展的可作为 Filter 索引的标量字段,例如:author、page 等。该标量字段名称、类型均由用户自定义,且不限制字段数量。 |
| field_type | 否 | 指定 Filter 字段的数据类型。取值如下: String:字符型。若 name 为 id,则该参数固定为 FieldType.String。 Uint64:无符号整数,该参数可设置为 FieldType.Uint64。 Array:数组类型,该参数可设置为 FieldType.Array,数组元素默认为 string。 |
| index_type | 否 | 指定 Filter 字段的索引类型。 若 name 为 id,该参数固定配置为 IndexType.PRIMARY_KEY,即以 id 为主键构建索引。 若 name 为其他自定义的标量字段,预在检索时,依据该字段过滤数据,可配置该字段索引类型为 IndexType.FILTER。 |
VectorIndex | name | 是 | 指定向量索引字段名,固定为 vector。 |
| index_type | 是 | 指定向量索引字段的索引类型。当前所支持的索引类型,及具体索引方式,请参见设计模型中的 Index。 FLAT:暴力检索,召回率100%,但检索效率低。 HNSW:可通过参数调整召回率,检索效率高,但数据量大后写入效率会变低。具体测试数据,请参见性能白皮书的测试结果。 IVF_FLAT、IVF_PQ、IVF_SQ4, IVF_SQ8, IVF_SQ16:IVF 系列索引,适用于上亿规模的数据集,检索效率高,内存占用低,写入效率高。 注意: 如果选择 IVF 系列索引类型,那么,请务必在 upsert() 插入数据时,将参数 build_index 设置为 false,表示在插入数据之后需要通过 rebuild_index() 重建索引。具体操作,请参见 应用 IVF 系列索引。 |
| dimension | 否 | 指定向量维度。 取值类型:uint64。 取值范围:[1,4096]。 配置建议:维度建议为4的整数倍,字节对齐有助于提升搜索性能。维度越高,存储成本越高,检索效率越低。 说明: 开通 Embedding 功能,则无需配置该字段,该字段将自动配置为 Embedding 模型对应的向量维度。 |
| metric_type | 是 | 指定向量之间距离度量的算法。取值如下: L2:全称是 Euclidean distance,指欧几里得距离,它计算向量之间的直线距离,所得的值越小,越与搜索值相似。L2在低维空间中表现良好,但是在高维空间中,由于维度灾难的影响,L2的效果会逐渐变差。 IP:全称为 Inner Product,是一种计算向量之间相似度的度量算法,它计算两个向量之间的点积(内积),所得值越大越与搜索值相似。 COSINE:余弦相似度(Cosine Similarity)算法,是一种常用的文本相似度计算方法。它通过计算两个向量在多维空间中的夹角余弦值来衡量它们的相似程度。所得值越大越与搜索值相似。 |
| params | 否 | 指定索引类型 indexType 为 HNSW ,需配置如下参数。 m:每个节点在检索构图中可以连接多少个邻居节点。 取值类型:uint64。 取值范围:[4,64]。默认为16。 efconstruction:搜索时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长。 取值类型:uint64。 取值范围:[8,512]。默认为200。 索引类型 indexType 为 IVF_FLAT、 IVF_PQ、 IVF_SQ4, IVF_SQ8, IVF_SQ16,需配置如下参数。 nlist :指索引中的聚类中心数量。 取值类型:uint64。 取值范围:[1,65536]。 m: 指乘积量化中原始数据被拆分的子向量的数量。该参数仅 IVF_PQ 索引类型需配置。更多信息,请参见 索引与计算。该参数仅 IVF_PQ 索引类型需配置。 取值要求:原始数据的向量的维度 D(即向量中元素的个数)必须能够被 m 整除,m 必须是一个正整数。 取值范围:[1,向量维度]。 |
SparseIndex | name | 否 | 可选择构建稀疏向量索引,字段名固定为 sparse_vector。 每个集合仅支持创建1个稀疏向量索引,无需指定稀疏向量维度。 |
| field_type | 否 | 稀疏向量字段类型固定为 FieldType.SparseVector。 |
| index_type | 否 | 稀疏向量索引类型固定为 IndexType.SPARSE_INVERTED。 |
| metric_type | 否 | 稀疏向量创建索引,当前仅支持设置为 IP 与 COSINE。 |
Embedding 参数
集合开启 Embedding,需配置 Embedding 模型相关参数,写入原始文本。
子参数 | 是否必选 | 参数配置 |
field | 否 | 指定文本字段名称。取值类型:String。 |
vector_field | 否 | 指定向量字段。通过 Embedding 模型生成的向量会自动存储在该字段中。固定为 vector 。 |
model | 否 | BGE_BASE_ZH:适用中文,768维,推荐使用 M3E_BASE:适用中文,768维。 E5_LARGE_V2:适用英文,1024维。 TEXT2VEC_LARGE_CHINESE:适用中文,1024维。 MULTILINGUAL_E5_BASE:适用于多种语言类型,768维。 |
Collection 参数
参数 | 参数含义 | 是否必选 | 参数配置 |
name | 指定 Collection 的名称。 | 是 | Collection 命名要求如下: 只能使用英文字母,数字,下划线_、中划线-,并以英文字母开头。 长度要求:[1,128]。 |
replicas | 指定 Collection 的副本数。副本数是指每个主分片有多个相同的备份,用来容灾和负载均衡。 | 是 | 取值类型:uint64。 取值范围如下所示。搜索请求量越高的索引,建议设置越多的副本数,避免负载不均衡。 单可用区实例:0。 两可用区实例:[1,节点数-1]。 三可用区实例:[2,节点数-1]。 |
shard
| 指定 Collection 的分片数。分片是把大数据集切成多个子数据集。 | 是 | 取值类型:uint64。 取值范围:[1,100]。例如:5。 配置建议:在搜索时,全部分片是并发执行的,分片数量越多,平均耗时越低,但是过多的分片会带来额外开销而影响性能。 单分片数据量建议控制在300万以内,例如500万向量,可设置2个分片。 如果数据量小于300万,建议使用1分片。系统对1分片有特定优化,可显著提升性能。 |
description | 指定 Collection 的描述信息。 | 否 | 取值类型:string。 字符长度要求:[1,256]。 示例:this is the colletion description。 |
index | 指定 Collection 存储文档的索引属性。 | 是 | 将已创建的 Index 参数赋值给 index。 |
embedding | Embedding 相关参数。 | 否 | 将已创建的 Embedding 参数赋值给 embedding 。 |
ttl_config | 标识数据库是否开启 TTL 配置,指定存储数据过期时间戳字段名。 | 否 | enable:标识数据库是否开启 TTL 属性。 True:开启。 False:关闭。 |
| | | timeField:指定存储数据过期时间戳的字段名。插入数据时,以标准的 Unix 时间戳指定该字段的值。字段名要求如下: 数据类型:unit64。 索引类型:Filter 索引。 示例:expired_at。
|
timeout | 请求超时时间。 | 否 | 单位:秒。 默认值:VectorDBClient() 接口配置的 timeout 时长。 取值范围:大于等于0。 |