package com.xly.milvus.util; import io.milvus.v2.common.DataType; import io.milvus.v2.service.collection.request.CreateCollectionReq; import java.util.HashMap; import java.util.Map; /** * Milvus字段Schema构建工具类 * 基于源码的 FieldSchema.FieldSchemaBuilder */ public class MilvusSchemaBuilder { /** * 创建主键ID字段(Int64类型,自增) */ public static CreateCollectionReq.FieldSchema createAutoIdField(String fieldName) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Int64) .isPrimaryKey(true) .autoID(true) .description("自增主键ID") .build(); } /** * 创建主键ID字段(String类型,不自增) */ public static CreateCollectionReq.FieldSchema createStringIdField(String fieldName, int maxLength) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.VarChar) .maxLength(maxLength) .isPrimaryKey(true) .autoID(false) .description("业务主键ID") .build(); } /** * 创建向量字段 */ public static CreateCollectionReq.FieldSchema createVectorField(String fieldName, int dimension) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.FloatVector) .dimension(dimension) .description("向量字段,维度: " + dimension) .build(); } /** * 创建文本字段(VarChar类型) */ public static CreateCollectionReq.FieldSchema createTextField(String fieldName, int maxLength) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.VarChar) .maxLength(maxLength) .description("文本内容") .build(); } /** * 创建JSON元数据字段 */ public static CreateCollectionReq.FieldSchema createJsonField(String fieldName) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.JSON) .description("JSON元数据") .build(); } /** * 创建整型字段 */ public static CreateCollectionReq.FieldSchema createIntField(String fieldName, String description) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Int64) .description(description) .build(); } /** * 创建整型字段(可空) */ public static CreateCollectionReq.FieldSchema createIntField(String fieldName, String description, boolean isNullable) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Int64) .description(description) .isNullable(isNullable) .build(); } /** * 创建整型字段(带默认值) */ public static CreateCollectionReq.FieldSchema createIntField(String fieldName, String description, long defaultValue) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Int64) .description(description) .defaultValue(defaultValue) .build(); } /** * 创建浮点型字段 */ public static CreateCollectionReq.FieldSchema createFloatField(String fieldName, String description) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Float) .description(description) .build(); } /** * 创建布尔型字段 */ public static CreateCollectionReq.FieldSchema createBoolField(String fieldName, String description) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Bool) .description(description) .build(); } /** * 创建布尔型字段(带默认值) */ public static CreateCollectionReq.FieldSchema createBoolField(String fieldName, String description, boolean defaultValue) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Bool) .description(description) .defaultValue(defaultValue) .build(); } /** * 创建数组字段 */ public static CreateCollectionReq.FieldSchema createArrayField(String fieldName, DataType elementType, int maxCapacity, String description) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.Array) .elementType(elementType) .maxCapacity(maxCapacity) .description(description) .build(); } /** * 创建分区键字段 */ public static CreateCollectionReq.FieldSchema createPartitionKeyField(String fieldName, DataType dataType, String description) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(dataType) .isPartitionKey(true) .description(description) .build(); } /** * 创建聚类键字段 */ public static CreateCollectionReq.FieldSchema createClusteringKeyField(String fieldName, DataType dataType, String description) { return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(dataType) .isClusteringKey(true) .description(description) .build(); } /** * 创建带分析器的文本字段(用于全文搜索) */ public static CreateCollectionReq.FieldSchema createAnalyzedTextField(String fieldName, int maxLength, String analyzerType) { Map analyzerParams = new HashMap<>(); analyzerParams.put("type", analyzerType); // "english", "chinese", "standard" 等 return CreateCollectionReq.FieldSchema.builder() .name(fieldName) .dataType(DataType.VarChar) .maxLength(maxLength) .enableAnalyzer(true) .analyzerParams(analyzerParams) .enableMatch(true) .description("支持全文搜索的文本字段") .build(); } }