Zvec Logo

Schema 演进

Zvec 支持动态 Schema 演进,允许你在 Collection 创建后修改其结构——无需停机、数据重新导入或重新索引。

支持的操作:

  • 添加或删除标量字段
  • 重命名字段更改数据类型(需确保变更安全,如从 INT32INT64
  • 创建或删除字段索引
  • ❌ 添加或删除向量字段(🔜 即将支持)

数据定义语言(DDL)

在 Zvec 中,Schema 变更通过**数据定义语言(DDL)**方法执行,分为两类:

  • Column DDL:定义你存储什么数据。 管理 Collection 的结构,包括添加删除重命名或修改字段。
  • Index DDL:定义你如何搜索数据。 控制字段上索引的创建删除

💡 Zvec 索引规则

  • 每个向量字段都必须建索引,使用合适的向量索引以支持相似度搜索。
  • 标量字段索引是可选的——但你应该为计划在过滤查询中使用的标量字段建立倒排索引(如 WHERE category = 'music')。

前置条件

本指南假设你已打开一个 Collection 并准备好了 collection 对象。


Column DDL

添加列

使用 add_column() 向已有 Collection 添加新的标量字段:

添加列
import zvec

new_field = zvec.FieldSchema(name="rating", data_type=zvec.DataType.INT32)
collection.add_column(field_schema=new_field, expression="5")  
  • field_schema: 定义新字段的名称和数据类型。详见标量字段 Schema
  • expression: 为已有 Document 指定默认值。由于已有 Document 没有 rating 字段,Zvec 使用此 expression 填充缺失值——本例中将所有现有 Document 的 rating 设为 5。

目前仅支持通过 add_column() 添加数值型标量字段。对 stringboolean 类型的支持即将推出。 因此,expression 必须求值为数字——可以是单个数字字面量(如 "5")或涉及已有数值字段的简单算术表达式(如 "publish_year + 1")。

删除列

使用 drop_column() 永久删除标量字段:

删除列
collection.drop_column(field_name="publish_year")

此操作会从 Collection 中每个 Document 删除该字段及其所有数据。该操作不可逆

修改列

使用 alter_column() 重命名列或更新其 Schema:

修改列
# 重命名
collection.alter_column(old_name="publish_year", new_name="release_year")   

# 更改类型(需兼容)
updated = zvec.FieldSchema(name="rating", data_type=zvec.DataType.FLOAT)
collection.alter_column(field_schema=updated)                               

查看当前 Schema

修改完成后,你可以随时打印 Schema 来查看 Collection 的当前结构:

查看当前 Schema
print(collection.schema)

详见 Schema 示例

Index DDL

创建索引

你可以使用 create_index()向量标量字段上创建(或替换)索引以加速搜索:

创建索引
import zvec

# 将已有的 HNSW 索引替换为 FLAT 索引
collection.create_index(  
    field_name="dense_embedding",
    index_param=zvec.FlatIndexParam(metric_type=zvec.MetricType.COSINE),
)

# 创建倒排索引
collection.create_index(  
    field_name="publish_year",
    index_param=zvec.InvertIndexParam(),
)

删除索引

使用 drop_index() 删除标量字段上的索引:

删除索引
collection.drop_index(field_name="publish_year")

不允许删除向量字段的索引。 在 Zvec 中,每个向量字段必须始终有且仅有一个索引以支持相似度搜索。

目录