createVikingdbCollection 用于创建向量数据库的数据集(Collection)。单个账号下最多可创建 200 个数据集,每个数据集最多包含 200 个字段。
每个 Collection 有且仅有一个主键。可以通过 fields.isPrimaryKey 显式指定一个 string 或 int64 类型的主键字段;未指定时,系统自动生成名为 AUTO_ID 的主键字段。
创建数据集时:
fields 中定义 vector 或 sparse_vector 字段。vectorize。text 字段配置 fullText。全文检索字段与向量化字段相互独立,同一个 text 字段可以同时配置向量化和全文检索。public CreateVikingdbCollectionResponse createVikingdbCollection( CreateVikingdbCollectionRequest body ) throws ApiException
请求参数类型为 CreateVikingdbCollectionRequest。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| projectName | 否 | String | 项目名称。不传时按 default 处理。 |
| collectionName | 是 | String | 数据集名称。必须以英文字母开头,可包含英文字母、数字、下划线和点号,不能以点号结尾;UTF-8 编码长度为 1-128 字节。同一账号下名称不能重复。 |
| description | 否 | String | 数据集描述,长度小于 65535 字节。 |
| fields | 是 | List<FieldForCreateVikingdbCollectionInput> | 字段列表。单个 Collection 最多包含 200 个字段。 |
| vectorize | 否 | VectorizeForCreateVikingdbCollectionInput | 向量化模型配置。仅在需要由向量库自动生成向量时设置。 |
| fullText | 否 | List<FullTextForCreateVikingdbCollectionInput> | 全文检索配置。最多可配置 5 个 text 字段,同一字段不能重复配置。 |
fields 的元素类型为 FieldForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| fieldName | 是 | String | 字段名称。必须以英文字母开头,只能包含英文字母、数字和下划线;UTF-8 编码长度为 1-128 字节。同一 Collection 下字段名不能重复。 |
| fieldType | 是 | FieldForCreateVikingdbCollectionInput.FieldTypeEnum | 字段类型,支持的 Java 枚举值见下表。 |
| dim | fieldType 为 VECTOR 时必填 | Integer | 稠密向量维度,范围为 [4, 4096]。仅 VECTOR 字段可设置。使用 Int8 量化索引时,维度必须是 4 的倍数。 |
| isPrimaryKey | 否 | Boolean | 是否为主键字段。仅 STRING 或 INT64 字段可作为主键,一个数据集最多指定一个主键。 |
| defaultValue | 否 | Object | 字段默认值。主键及 VECTOR、SPARSE_VECTOR、tensor、TEXT、IMAGE、VIDEO 字段不允许显式设置。TEXT 的隐式默认值为空字符串。 |
| 参数 | 类型 | 备注 |
|---|---|---|
INT64 | int64 | 整数。作为主键时,字段值不能为 0。 |
FLOAT32 | float32 | 浮点数。 |
STRING | string | 字符串。用于枚举过滤时推荐不超过 128 字节;硬性限制为 65535 字节;作为主键时不超过 256 字节。 |
BOOL | bool | 布尔值。 |
LIST_STRING_ | list<string> | 字符串数组。列表最多 20000 个元素,单元素不超过 1024 字节,总大小不超过 1 MB。 |
LIST_INT64_ | list<int64> | 整数数组,列表最多 1024 个元素。 |
VECTOR | vector | 稠密向量,维度范围为 [4, 4096]。 |
SPARSE_VECTOR | sparse_vector | 稀疏向量。 |
TEXT | text | 文本。单字段不超过 1 MB;一个数据集内所有 text 字段总大小不超过 4 MB。全文检索字段推荐单字段写入不超过 64 KB。 |
IMAGE | image | 图片,可使用 TOS、HTTP 或 HTTPS 地址。图片宽高需大于 14 px,像素总数小于 3600 万。 |
VIDEO | video | 视频,可使用 TOS、HTTP 或 HTTPS 地址,大小不超过 50 MB。 |
DATE_TIME | date_time | 日期时间,取值范围为 1970-01-01T00:00:00Z 至 3000-01-01T00:00:00Z。 |
GEO_POINT | geo_point | 地理坐标,格式为 longitude,latitude。longitude 范围为 (-180, 180),latitude 范围为 (-90, 90)。 |
各可设置默认值的字段在省略 defaultValue 时使用以下值:
| 参数 | 类型 | 备注 |
|---|---|---|
INT64 | Long | 默认值为 0。 |
FLOAT32 | Float | 默认值为 0.0。 |
STRING | String | 默认值为 "default"。 |
BOOL | Boolean | 默认值为 false。 |
LIST_INT64_ | List<Long> | 默认值为 [0]。 |
LIST_STRING_ | List<String> | 默认值为 ["default"]。 |
DATE_TIME | String | 默认值为 1970-01-01T00:00:00Z。 |
GEO_POINT | String | 默认值为 "0, 0"。 |
LIST_GEO_POINT_ | List<String> | 默认值为空列表。 |
vectorize 的类型为 VectorizeForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| dense | 是 | DenseForCreateVikingdbCollectionInput | 稠密向量化模型配置。 |
| sparse | 否 | SparseForCreateVikingdbCollectionInput | 稀疏向量化模型配置。 |
| tensor | 否 | TensorForCreateVikingdbCollectionInput | 张量化模型配置。 |
dense 的类型为 DenseForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| modelName | 是 | DenseForCreateVikingdbCollectionInput.ModelNameEnum | 模型名称。当前 API 模型列表包括 BGE_LARGE_ZH、BGE_M3、BGE_VISUALIZED_M3 和 DOUBAO_EMBEDDING_VISION。 |
| modelVersion | 否 | String | 模型版本。BGE 系模型默认使用 default;豆包模型应指定对应版本。 |
| textField | 否 | String | 文本向量化字段名称。 |
| imageField | 否 | String | 图片向量化字段名称。 |
| videoField | 否 | String | 视频向量化字段名称。 |
| dim | 否 | Integer | 稠密向量维度。必须是所选模型支持的可选维度;省略时使用模型默认维度。 |
| instruction | 否 | InstructionForCreateVikingdbCollectionInput | Instruction 配置。 |
sparse 的类型为 SparseForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| modelName | 是 | SparseForCreateVikingdbCollectionInput.ModelNameEnum | 模型名称。应选择当前 API 模型列表中支持稀疏向量的模型。 |
| modelVersion | 否 | String | 模型版本。 |
| textField | 否 | String | 文本向量化字段名称。 |
| instruction | 否 | InstructionForCreateVikingdbCollectionInput | Instruction 配置。 |
tensor 的类型为 TensorForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| modelName | 是 | TensorForCreateVikingdbCollectionInput.ModelNameEnum | 当前固定为 DOUBAO_EMBEDDING_VISION,并需与 dense.modelName 保持一致。 |
| modelVersion | 否 | String | 当前固定为 251215,并需与 dense.modelVersion 保持一致。 |
| textField | 否 | String | 文本张量化字段名称,需与 Dense 配置的对应字段一致。 |
| imageField | 否 | String | 图片张量化字段名称,需与 Dense 配置的对应字段一致。 |
| videoField | 否 | String | 视频张量化字段名称,需与 Dense 配置的对应字段一致。 |
| ndim | 是 | Integer | 张量阶数,当前固定为 2。Java 链式方法名为 ndim(...)。 |
| shape | 是 | List<Integer> | 张量维度,格式为 [M, N]。M 为 2-64;N 为 4-2048,且 N 大于 4 时必须是 8 的倍数。 |
| instruction | 否 | InstructionForCreateVikingdbCollectionInput | Instruction 配置。 |
instruction 的类型为 InstructionForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| autoFill | 是 | Boolean | 是否在写入数据时根据模态信息自动填充 Instruction。省略整个 instruction 配置时,等价于 autoFill=true。模型不支持 Instruction 时,该配置不生效。 |
BGE_LARGE_ZH:模型版本为 default,支持文本稠密向量化;默认及可选维度均为 1024,文本截断长度为 512;支持 Instruction,不支持稀疏向量和张量。BGE_M3:模型版本为 default,支持文本稠密及稀疏向量化;默认及可选维度均为 1024,文本截断长度为 8192;不支持张量和 Instruction。BGE_VISUALIZED_M3:模型版本为 default,支持文本、图片及其组合;默认及可选维度均为 1024,文本截断长度为 8192;不支持稀疏向量、张量和 Instruction。DOUBAO_EMBEDDING_VISION 版本 250615:支持文本、图片及 full-modal-seq;默认维度为 2048,可选 2048 或 1024,文本截断长度为 128k;支持 Instruction,不支持稀疏向量和张量。DOUBAO_EMBEDDING_VISION 版本 251215:支持文本、图片、full-modal-seq、稀疏向量和张量;默认维度为 2048,可选 2048 或 1024,文本截断长度为 128k;支持 Instruction。fullText 的元素类型为 FullTextForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| field | 是 | String | 全文检索字段名。该字段必须已在 fields 中定义,且字段类型必须为 TEXT。 |
| analyzer | 是 | AnalyzerForCreateVikingdbCollectionInput | 全文检索解析器配置。 |
配置 fullText 后:
text 字段,无需写入分词结果。UpsertData 或 UpdateData 时,系统会自动完成文本解析。analyzer 的类型为 AnalyzerForCreateVikingdbCollectionInput。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| tokenizer | 二选一 | String | 单分词器配置,不能与 tokenizers 同时设置。可选值为 standard、zh、whitespace、cjk_char_ngram_2、cjk_rare_char、pinyin。 |
| tokenizers | 二选一 | List<String> | 多分词器配置。数组不能为空、不能包含重复项,且不能与 tokenizer 同时设置。每一项的可选值与 tokenizer 相同。 |
| characterConverters | 否 | List<String> | 字符转换器。可选值为 en_lower_case、en_num_half_width。不传时默认使用两者;显式传空列表表示不启用字符转换。 |
| stopWordsFilters | 否 | List<String> | 停用词过滤器。可选值为 symbol、symbol_simple、en、en_simple、zh、zh_simple。不传时默认使用 symbol、en、zh;显式传空列表表示不启用停用词过滤。 |
返回类型为 CreateVikingdbCollectionResponse。
| 参数 | 必须 | 类型 | 备注 |
|---|---|---|---|
| message | 成功时返回 | String | 操作结果信息。成功时为 success。 |
| resourceId | 成功时返回 | String | 新创建数据集的资源 ID。 |
| responseMetadata | 是 | ResponseMetadata | 请求元数据,可通过 getResponseMetadata() 获取,包括 Request ID、Action、Region 和 Service 等信息。 |
运行示例前,请完成以下准备:
AK、SK 环境变量。import com.volcengine.ApiClient; import com.volcengine.ApiException; import com.volcengine.sign.Credentials; import com.volcengine.vikingdb.VikingdbApi; import com.volcengine.vikingdb.model.CreateVikingdbCollectionRequest; import com.volcengine.vikingdb.model.CreateVikingdbCollectionResponse; import com.volcengine.vikingdb.model.FieldForCreateVikingdbCollectionInput; import java.util.Arrays; public class CreateCollectionWithVector { public static void main(String[] args) { ApiClient apiClient = new ApiClient() .setEndpoint("vikingdb.cn-beijing.volcengineapi.com") .setCredentials(Credentials.getCredentials( System.getenv("AK"), System.getenv("SK") )) .setRegion("cn-beijing"); VikingdbApi api = new VikingdbApi(apiClient); CreateVikingdbCollectionRequest request = new CreateVikingdbCollectionRequest() .projectName("default") .collectionName("<YOUR_COLLECTION_NAME>") .description("Collection with vector fields") .fields(Arrays.asList( new FieldForCreateVikingdbCollectionInput() .fieldName("f_id") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.STRING ) .isPrimaryKey(true), new FieldForCreateVikingdbCollectionInput() .fieldName("f_int64") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.INT64 ) .defaultValue(-1L), new FieldForCreateVikingdbCollectionInput() .fieldName("f_vector") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.VECTOR ) .dim(1024), new FieldForCreateVikingdbCollectionInput() .fieldName("f_sparse_vector") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.SPARSE_VECTOR ) )); try { CreateVikingdbCollectionResponse response = api.createVikingdbCollection(request); System.out.println("all response content: " + response); System.out.println("message: " + response.getMessage()); System.out.println("resourceId: " + response.getResourceId()); System.out.println( "responseMetadata: " + response.getResponseMetadata() ); System.out.println( "requestId: " + response.getResponseMetadata().getRequestId() ); System.out.println( "action: " + response.getResponseMetadata().getAction() ); System.out.println( "region: " + response.getResponseMetadata().getRegion() ); System.out.println( "service: " + response.getResponseMetadata().getService() ); } catch (ApiException e) { System.err.println("http code: " + e.getCode()); System.err.println( "requestId: " + e.getResponseMetadata().getRequestId() ); System.err.println( "action: " + e.getResponseMetadata().getAction() ); System.err.println( "region: " + e.getResponseMetadata().getRegion() ); System.err.println( "service: " + e.getResponseMetadata().getService() ); System.err.println( "error code: " + e.getResponseMetadata().getError().getCode() ); System.err.println( "error message: " + e.getResponseMetadata().getError().getMessage() ); System.err.println("response body: " + e.getResponseBody()); } } }
import com.volcengine.ApiClient; import com.volcengine.ApiException; import com.volcengine.sign.Credentials; import com.volcengine.vikingdb.VikingdbApi; import com.volcengine.vikingdb.model.CreateVikingdbCollectionRequest; import com.volcengine.vikingdb.model.CreateVikingdbCollectionResponse; import com.volcengine.vikingdb.model.DenseForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.FieldForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.InstructionForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.SparseForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.TensorForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.VectorizeForCreateVikingdbCollectionInput; import java.util.Arrays; public class CreateCollectionWithVectorize { public static void main(String[] args) { ApiClient apiClient = new ApiClient() .setEndpoint("vikingdb.cn-beijing.volcengineapi.com") .setCredentials(Credentials.getCredentials( System.getenv("AK"), System.getenv("SK") )) .setRegion("cn-beijing"); VikingdbApi api = new VikingdbApi(apiClient); InstructionForCreateVikingdbCollectionInput instruction = new InstructionForCreateVikingdbCollectionInput() .autoFill(true); CreateVikingdbCollectionRequest request = new CreateVikingdbCollectionRequest() .projectName("default") .collectionName("<YOUR_COLLECTION_NAME>") .description("Collection with automatic vectorization") .fields(Arrays.asList( new FieldForCreateVikingdbCollectionInput() .fieldName("f_id") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.INT64 ) .isPrimaryKey(true), new FieldForCreateVikingdbCollectionInput() .fieldName("f_text") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.TEXT ), new FieldForCreateVikingdbCollectionInput() .fieldName("f_image") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.IMAGE ) )) .vectorize( new VectorizeForCreateVikingdbCollectionInput() .dense( new DenseForCreateVikingdbCollectionInput() .modelName( DenseForCreateVikingdbCollectionInput .ModelNameEnum .DOUBAO_EMBEDDING_VISION ) .modelVersion("251215") .textField("f_text") .imageField("f_image") .dim(1024) .instruction(instruction) ) .sparse( new SparseForCreateVikingdbCollectionInput() .modelName( SparseForCreateVikingdbCollectionInput .ModelNameEnum .DOUBAO_EMBEDDING_VISION ) .modelVersion("251215") .textField("f_text") ) .tensor( new TensorForCreateVikingdbCollectionInput() .modelName( TensorForCreateVikingdbCollectionInput .ModelNameEnum .DOUBAO_EMBEDDING_VISION ) .modelVersion("251215") .textField("f_text") .imageField("f_image") .ndim(2) .shape(Arrays.asList(64, 2048)) .instruction(instruction) ) ); try { CreateVikingdbCollectionResponse response = api.createVikingdbCollection(request); System.out.println("all response content: " + response); System.out.println("message: " + response.getMessage()); System.out.println("resourceId: " + response.getResourceId()); System.out.println( "responseMetadata: " + response.getResponseMetadata() ); System.out.println( "requestId: " + response.getResponseMetadata().getRequestId() ); System.out.println( "action: " + response.getResponseMetadata().getAction() ); System.out.println( "region: " + response.getResponseMetadata().getRegion() ); System.out.println( "service: " + response.getResponseMetadata().getService() ); } catch (ApiException e) { System.err.println("http code: " + e.getCode()); System.err.println( "requestId: " + e.getResponseMetadata().getRequestId() ); System.err.println( "action: " + e.getResponseMetadata().getAction() ); System.err.println( "region: " + e.getResponseMetadata().getRegion() ); System.err.println( "service: " + e.getResponseMetadata().getService() ); System.err.println( "error code: " + e.getResponseMetadata().getError().getCode() ); System.err.println( "error message: " + e.getResponseMetadata().getError().getMessage() ); System.err.println("response body: " + e.getResponseBody()); } } }
以下示例中,f_text 同时用于向量化和全文检索。后续调用 searchByKeywords 且不指定 mode 时,默认优先使用 bm25。
import com.volcengine.ApiClient; import com.volcengine.ApiException; import com.volcengine.sign.Credentials; import com.volcengine.vikingdb.VikingdbApi; import com.volcengine.vikingdb.model.AnalyzerForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.CreateVikingdbCollectionRequest; import com.volcengine.vikingdb.model.CreateVikingdbCollectionResponse; import com.volcengine.vikingdb.model.DenseForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.FieldForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.FullTextForCreateVikingdbCollectionInput; import com.volcengine.vikingdb.model.VectorizeForCreateVikingdbCollectionInput; import java.util.Arrays; public class CreateCollectionWithVectorizeAndFullText { public static void main(String[] args) { ApiClient apiClient = new ApiClient() .setEndpoint("vikingdb.cn-beijing.volcengineapi.com") .setCredentials(Credentials.getCredentials( System.getenv("AK"), System.getenv("SK") )) .setRegion("cn-beijing"); VikingdbApi api = new VikingdbApi(apiClient); CreateVikingdbCollectionRequest request = new CreateVikingdbCollectionRequest() .projectName("default") .collectionName("<YOUR_COLLECTION_NAME>") .description("Collection with vectorize and full text") .fields(Arrays.asList( new FieldForCreateVikingdbCollectionInput() .fieldName("f_id") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.INT64 ) .isPrimaryKey(true), new FieldForCreateVikingdbCollectionInput() .fieldName("f_text") .fieldType( FieldForCreateVikingdbCollectionInput .FieldTypeEnum.TEXT ) )) .vectorize( new VectorizeForCreateVikingdbCollectionInput() .dense( new DenseForCreateVikingdbCollectionInput() .modelName( DenseForCreateVikingdbCollectionInput .ModelNameEnum.BGE_M3 ) .modelVersion("default") .textField("f_text") ) ) .fullText(Arrays.asList( new FullTextForCreateVikingdbCollectionInput() .field("f_text") .analyzer( new AnalyzerForCreateVikingdbCollectionInput() .tokenizer("standard") .characterConverters(Arrays.asList( "en_lower_case", "en_num_half_width" )) .stopWordsFilters(Arrays.asList( "symbol", "en", "zh" )) ) )); try { CreateVikingdbCollectionResponse response = api.createVikingdbCollection(request); System.out.println("all response content: " + response); System.out.println("message: " + response.getMessage()); System.out.println("resourceId: " + response.getResourceId()); System.out.println( "responseMetadata: " + response.getResponseMetadata() ); System.out.println( "requestId: " + response.getResponseMetadata().getRequestId() ); System.out.println( "action: " + response.getResponseMetadata().getAction() ); System.out.println( "region: " + response.getResponseMetadata().getRegion() ); System.out.println( "service: " + response.getResponseMetadata().getService() ); } catch (ApiException e) { System.err.println("http code: " + e.getCode()); System.err.println( "requestId: " + e.getResponseMetadata().getRequestId() ); System.err.println( "action: " + e.getResponseMetadata().getAction() ); System.err.println( "region: " + e.getResponseMetadata().getRegion() ); System.err.println( "service: " + e.getResponseMetadata().getService() ); System.err.println( "error code: " + e.getResponseMetadata().getError().getCode() ); System.err.println( "error message: " + e.getResponseMetadata().getError().getMessage() ); System.err.println("response body: " + e.getResponseBody()); } } }