新建 Collection

最近更新时间:2024-04-19 20:01:51

我的收藏

功能介绍

createCollection()用于为已创建的 Base 类向量数据库创建 Collection。
说明:
当前版本一个数据库实例下,不支持创建同名的 Collection。

请求示例

创建 Collection 配置 Embedding 参数
创建 Collection 不配置 Embedding 参数
创建一个名为 book-emb 的集合 ,配置 Embedding 模型相关参数,用于写入原始文本。Embedding 模型自动将原始文本进行向量化。
// link database, client 为 VectorDBClient() 创建的客户端对象
Database db = client.database("db-test");
// 初始化 Colleciton 参数
CreateCollectionParam collectionParam = CreateCollectionParam.newBuilder()
.withName("book-emb")
.withShardNum(3)
.withReplicaNum(2)
.withDescription("this is an embedding collection")
.addField(new FilterIndex("id", FieldType.String, IndexType.PRIMARY_KEY))
.addField(new VectorIndex("vector", BGE_BASE_ZH.getDimension(), IndexType.HNSW,
                  MetricType.COSINE, new HNSWParams(16, 200)))
          .addField(new FilterIndex("bookName", FieldType.String, IndexType.FILTER))
          .addField(new FilterIndex("author", FieldType.String, IndexType.FILTER))
          .withEmbedding(
                  Embedding
                          .newBuilder()
                          .withModel(BGE_BASE_ZH)
                          .withField("text")
                          .withVectorField("vector")
                          .build())
.build();
Collection collection = db.createCollection(collectionParam);
创建一个名为 book-vector 的集合,不配置 Embedding 模型相关参数,用于写入 3 维向量数据。
// link database, client 为 VectorDBClient() 创建的客户端对象
Database db = client.database("db-test");
// 初始化 Colleciton 参数
CreateCollectionParam collectionParam = CreateCollectionParam.newBuilder()
.withName("book-vector")
.withShardNum(3)
.withReplicaNum(2)
.withDescription("this is a collection book vector")
.addField(new FilterIndex("id", FieldType.String, IndexType.PRIMARY_KEY))
        .addField(new VectorIndex("vector", 3, IndexType.HNSW,
                MetricType.COSINE, new HNSWParams(16, 200)))
        .addField(new FilterIndex("bookName", FieldType.String, IndexType.FILTER))
        .addField(new FilterIndex("author", FieldType.String, IndexType.FILTER))

.build();
Collection collection = db.createCollection(collectionParam);

请求参数

参数
参数含义
子参数
是否必选
参数配置
Name
指定 Collection 的名称。
-
Collection 命名要求如下:
只能使用英文字母,数字,下划线_、中划线-,并以英文字母开头。
长度要求:[1,128]。
ReplicaNum
指定 Collection 的副本数。副本数是指每个主分片有多个相同的备份,用来容灾和负载均衡。
-
取值类型:int。
取值范围如下所示。搜索请求量越高的索引,建议设置越多的副本数,避免负载不均衡。
单可用区实例:0。
两可用区实例:[1,节点数-1]。
三可用区实例:[2,节点数-1]。
ShardNum
指定 Collection 的分片数。分片是把大数据集切成多个子数据集。
-
取值类型:int。
取值范围:[1,100]。例如:5。
配置建议:在搜索时,全部分片是并发执行的,分片数量越多,平均耗时越低,但是过多的分片会带来额外开销而影响性能。
单分片数据量建议控制在300万以内,例如500万向量,可设置2个分片。
如果数据量小于300万,建议使用1分片。系统对1分片有特定优化,可显著提升性能。
Description
指定 Collection 的描述信息。
-
取值类型:string。
字符长度要求:[1,256]。
示例:this is the collection description。
addField
FilterIndex
fieldName
指定 Filter 索引标量字段名。
说明:
Filter 索引(Filter Index)是建立在标量字段的索引。该标量字段名称、类型均由用户自定义,不限制标量字段数量。
标量字段被建立 Filter 索引之后,向量检索时,将依据 Filter 指定的标量字段的条件表达式进行过滤查询和范围查询以此来匹配相似向量。
建立 Filter 索引时,选取需要使用 Filter 表达式高效过滤数据的标量字段,不做过滤查询、检索的标量字段不必建立 Filter 索引。切勿将所有标量字段建立索引,导致内存资源的浪费。
必须构建唯一的 Document id 为主键的 Filter 索引,配置 name id
配置其他自定义扩展的可作为 Filter 索引标量字段,例如:author、page 等。该标量字段名称、类型均由用户自定义,且不限制字段数量。
filedType
指定 Filter 字段的数据类型。取值如下:
String:字符型。若 name id,则该参数固定为 FieldType.String
Uinit64:指无符号整数,该参数可设置为 FieldType.Uint64
Array:数组类型,该参数可设置为 FieldType.Array,数组元素默认为 String。
indexType
指定 Filter 字段的索引类型。
fieldName id,该参数固定配置为 IndexType.PRIMARY_KEY,即以 id 为主键构建索引。
fieldName 为其他自定义的标量字段,该参数设置自定义字段的索引类别。该字段设置为 IndexType.FILTER,在后续检索数据时,才能对该字段设置 Filter 条件表达式进行 混合检索
VectorIndex
fieldName
指定向量索引的索引对象为 vector
indexType
指定向量索引字段的索引类型。当前所支持的索引类型,及具体索引方式,请参见设计模型中的 Index。
FLAT:暴力检索,召回率100%,但检索效率低。
HNSW:可通过参数调整召回率,检索效率高,但数据量大后写入效率会变低。具体测试数据,请参见性能白皮书的测试结果。
IVF_FLATIVF_PQIVF_SQ4, IVF_SQ8, IVF_SQ16:IVF 系列索引,适用于上亿规模的数据集,检索效率高,内存占用低,写入效率高。
dimension
指定索引对象为 vector 的向量维度。
取值类型:uint 64。
取值范围:[1,4096]。
配置建议:维度建议为4的整数倍,字节对齐有助于提升搜索性能。维度越高,存储成本越高,检索效率越低。
metricType
指定索引对象为 vector 的向量之间距离度量的算法。取值如下:
L2:全称是 Euclidean distance,指欧几里得距离,它计算向量之间的直线距离,所得的值越小,越与搜索值相似。L2在低维空间中表现良好,但是在高维空间中,由于维度灾难的影响,L2的效果会逐渐变差。
IP:全称为 Inner Product,是一种计算向量之间相似度的度量算法,它计算两个向量之间的点积(内积),所得值越大越与搜索值相似。
COSINE:余弦相似度(Cosine Similarity)算法,是一种常用的文本相似度计算方法。它通过计算两个向量在多维空间中的夹角余弦值来衡量它们的相似程度。所得值越大越与搜索值相似。
params
指定索引类型 indexType HNSW ,则 HNSWParams 需配置如下参数。
M:每个节点在检索构图中可以连接多少个邻居节点。
取值类型:uint64。
取值范围:[4,64]。默认为16。
efconstruction:搜索时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长。
取值类型:uint64。
取值范围:[8,512]。默认为200。
指定索引类型 indexType 分别为 IVF_FLATIVF_PQIVF_SQ4, IVF_SQ8, IVF_SQ16,则 IVFFLATParams/IVFPQParams/ IVFSQ8Params 需配置如下参数。
NList :指索引中的聚类中心数量。
取值类型:uint64。
取值范围:[1,65536]。
M:指乘积量化中原始数据被拆分的子向量的数量。该参数仅IVF_PQ 索引类型需配置。更多信息,请参见 索引与计算
取值要求:原始数据的向量的维度 D(即向量中元素的个数)必须能够被 m 整除,m 必须是一个正整数。
取值范围:[1,向量维度]。
Embedding
设置 Embedding 相关参数
Model
指定使用的 Embedding 模型的名称。您需根据业务的语言类型、数据维度要求等综合选择合适的模型。具体信息,参见 Embedding 介绍。取值如下所示:
BGE_BASE_ZH:适用中文,768 维,推荐使用。
M3E_BASE:适用中文,768 维。
E5_LARGE_V2:适用英文,1024 维。
TEXT2VEC_LARGE_CHINESE:适用中文,1024 维。
MULTILINGUAL_E5_BASE:适用于多种语言类型,768 维。
Field
指定文本字段名称。取值类型:String。
说明:
通过 upsert() 写入数据或通过 update() 更新数据时,Embedding 模型会自动将该字段的文本内容转换成向量数据。
VectorField
指定向量字段。通过Embedding模型生成的向量会自动存储在该字段中。固定为 vector

返回结果

说明:
createCollection() 执行之后如果抛出异常,说明创建 Collection 失败。具体异常原因,可根据提示信息进行分析。无任何提示信息说明创建 Collection 执行成功,可使用 listCollections() 查看已经创建的 Collection。