当前位置: 首页 > news >正文

Milvus(7):Schema、主字段和自动识别

1 Schema

        Schema 定义了 Collections 的数据结构。在创建一个 Collection 之前,你需要设计出它的 Schema。本页将帮助你理解 Collections 模式,并自行设计一个示例模式。

        在 Zilliz Cloud 上,Collection Schema 是关系数据库中一个表的组合,它定义了 Zilliz Cloud 如何组织 Collection 中的数据。设计良好的 Schema 至关重要,因为它抽象了数据模型,并决定能否通过搜索实现业务目标。此外,由于插入 Collections 的每一行数据都必须遵循 Schema,因此有助于保持数据的一致性和长期质量。从技术角度看,定义明确的 Schema 会带来组织良好的列数据存储和更简洁的索引结构,从而提升搜索性能。 一个 Collection Schema 有一个主键、最多四个向量字段和几个标量字段。

        搜索系统的数据模型设计包括分析业务需求,并将信息抽象为模式表达的数据模型。例如,搜索一段文本必须通过 "嵌入 "将字面字符串转换为向量并启用向量搜索,从而实现 "索引"。除了这一基本要求外,可能还需要存储出版时间戳和作者等其他属性。有了这些元数据,就可以通过过滤来完善语义搜索,只返回特定日期之后或特定作者发表的文本。您还可以检索这些标量与主文本,以便在应用程序中呈现搜索结果。每个标量都应分配一个唯一标识符,以整数或字符串的形式组织这些文本片段。这些元素对于实现复杂的搜索逻辑至关重要。

1.1 创建 Schema

        以下代码片段演示了如何创建模式。

from pymilvus import MilvusClient, DataTypeschema = MilvusClient.create_schema()

1.2 添加主字段

        Collections 中的主字段唯一标识一个实体。它只接受Int64VarChar值。以下代码片段演示了如何添加主字段。

schema.add_field(field_name="my_id",datatype=DataType.INT64,# highlight-startis_primary=True,auto_id=False,# highlight-end
)

        添加字段时,可以通过将is_primary 属性设置为True 来明确说明该字段是主字段。主字段默认接受Int64值。在这种情况下,主字段值应为整数,类似于12345 。如果选择在主字段中使用VarChar值,则其值应为字符串,类似于my_entity_1234 。也可以将autoId 属性设置为True ,使 Zilliz Cloud 在插入数据时自动分配主字段值。

1.3 添加向量字段

        向量字段接受各种稀疏和密集向量嵌入。在 Zilliz Cloud 上,您可以向 Collections 添加四个向量字段。以下代码片段演示了如何添加向量字段。

schema.add_field(field_name="my_vector",datatype=DataType.FLOAT_VECTOR,# highlight-next-linedim=5
)

        上述代码片段中的dim 参数表示向量字段中要保存的向量嵌入的维数。FLOAT_VECTOR 值表示向量字段持有 32 位浮点数列表,通常用于表示反比例。除此之外,Zilliz Cloud 还支持以下类型的向量嵌入:

  • FLOAT16_VECTOR:这种类型的向量场保存一个 16 位半精度浮点数列表,通常适用于内存或带宽受限的深度学习或基于 GPU 的计算场景。
  • BFLOAT16_VECTOR:这种类型的向量字段保存 16 位浮点数列表,精度有所降低,但指数范围与 Float32 相同。这种类型的数据常用于深度学习场景,因为它能在不明显影响精度的情况下减少内存使用量。
  • BINARY_VECTOR:这种类型的向量场保存着一个 0 和 1 的列表。它们是图像处理和信息检索场景中表示数据的紧凑特征。
  • SPARSE_FLOAT_VECTOR:这种类型的向量场可保存非零数字及其序列号列表,用于表示稀疏向量嵌入。

1.4 添加标量字段

        在常见情况下,可以使用标量字段来存储存储在 Milvus 中的向量嵌入的元数据,并通过元数据过滤进行 ANN 搜索,以提高搜索结果的正确性。Zilliz Cloud 支持多种标量字段类型,包括VarCharBooleanIntFloatDoubleArray 和JSON

1.4.1 添加字符串字段

        在 Milvus 中,您可以使用 VarChar 字段来存储字符串。

schema.add_field(field_name="my_varchar",datatype=DataType.VARCHAR,# highlight-next-linemax_length=512
)

1.4.2 添加数字字段

        Milvus 支持的数字类型有Int8,Int16,Int32,Int64,Float 和Double 。

schema.add_field(field_name="my_int64",datatype=DataType.INT64,
)

1.4.3 添加布尔字段

        Milvus 支持布尔字段。以下代码片段演示了如何添加布尔字段。

schema.add_field(field_name="my_bool",datatype=DataType.BOOL,
)

1.4.4 添加 JSON 字段

        JSON 字段通常存储半结构化的 JSON 数据。

schema.add_field(field_name="my_json",datatype=DataType.JSON,
)

1.4.5 添加数组字段

        数组字段存储元素列表。数组字段中所有元素的数据类型应相同。

schema.add_field(field_name="my_array",datatype=DataType.ARRAY,element_type=DataType.VARCHAR,max_capacity=5,max_length=512,
)

2 主字段和自动识别

        主字段唯一标识一个实体。本页介绍如何添加两种不同数据类型的主字段,以及如何启用 Milvus 自动分配主字段值。在 Collections 中,每个实体的主键都应该是全局唯一的。添加主字段时,需要显式地将其数据类型设置为VARCHARINT64。将其数据类型设置为INT64表示主键应为整数,类似于12345 ;将其数据类型设置为VARCHAR表示主键应为字符串,类似于my_entity_1234 。

        你也可以启用AutoID,让 Milvus 自动为进入的实体分配主键。在集合中启用AutoID后,插入实体时不要包含主键。Collections 中的主字段没有默认值,也不能为空。

2.1 使用 Int64 主键

        要使用 Int64 类型的主键,需要将datatype 设置为DataType.INT64 ,将is_primary 设置为true 。如果还需要 Milvus 为进入的实体分配主键,还需要将auto_id 设置为true 。

from pymilvus import MilvusClient, DataTypeschema = MilvusClient.create_schema()schema.add_field(field_name="my_id",datatype=DataType.INT64,# highlight-startis_primary=True,auto_id=True,# highlight-end
)

2.2 使用 VarChar 主键

        要使用 VarChar 主键,除了将data_type 参数值更改为DataType.VARCHAR 外,还需要为字段设置max_length 参数。

schema.add_field(field_name="my_id",datatype=DataType.VARCHAR,# highlight-startis_primary=True,auto_id=True,max_length=512,# highlight-end
)

相关文章:

  • Apache Spark 源码解析
  • Go 语言 TCP 端口扫描器实现与 Goroutine 池原理
  • Modbus主从通信功能码与报文格式
  • 如何在SpringBoot中通过@Value注入Map和List并使用YAML配置?
  • 电子学会—青少年软件编程 python一级等级考试真题—2025年03月
  • 20242817-李臻-课上测试:信号处理
  • uniapp自定义封装tabbar
  • TDengine 数据缓存技术
  • iOS/Flutter混合开发之PlatformView配置与使用
  • 记录一次无界微前端的简单使用
  • Ubuntu 上手动安装 Go 环境并解决“可执行文件格式错误”
  • Mac「brew」快速安装Redis
  • 输入电抗器和输出电抗器的作用-杭州干扰净电子科技
  • 二叉树的遍历(广度优先搜索)
  • Springboot 手搓 后端 滑块验证码生成
  • 【GCC bug】libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found
  • ES历史版本下载
  • uniapp-商城-36-shop 购物车 选好了 进行订单确认2 支付方式颜色变化和颜色滤镜filter
  • 高级java每日一道面试题-2025年4月25日-基础篇[反射篇]-在运行时,如何判断某个类是否实现了特定的接口或扩展了某个父类?
  • 算力网络(CFN)在跨校联合科研中的应用:安全性挑战与联邦调度实践
  • 锚定“双一流”战略坐标,福建农林大学向全球英才“伸出橄榄枝”
  • 手机号旧机主信用卡欠款、新机主被催收骚扰四年,光大银行济南分行回应
  • 王毅会见乌兹别克斯坦外长赛义多夫
  • 税务部门曝光3起通过拆分经营骗享小规模纳税人税费优惠偷税案件
  • 安徽一交通事故责任认定引质疑:民警和司法鉴定人被处罚,已中止诉讼
  • 加拿大财长:加拿大需要抗击美国关税