如果你要修改集合本身的属性,如集合名称、集合元数据、索引配置等信息,可以使用 modify() 函数。注意,不是修改集合内部向量 / 文档记录,如果你要修改单条向量数据可以使用 update() / upsert() 函数。
方法签名:
col.modify(
name=None, # 新名字
metadata=None, # 新元数据(整体替换,不是增量修改哦)
configuration=None, # 新配置
)改名字和元数据:
col.modify(name="kb_notes_v2", metadata={"description": "新描述"})注意:metadata 是整体替换不是合并。上面这句跑完,version 这个 key 就没了。想保留老字段得自己先读出来再合并:
new_meta = {**(col.metadata or {}), "description": "新描述"}
col.modify(metadata=new_meta)改索引参数(比如把 ef_search 从 100 调到 200):
col.modify(configuration={"hnsw": {"ef_search": 200}})
print(col.configuration["hnsw"]["ef_search"])
# 200注意,只有部分参数支持建完再改。ef_search、num_threads、batch_size、sync_threshold、resize_factor 可以改;space、ef_construction、max_neighbors 这些影响索引结构的不能改(或者说改了对已有索引不生效),要改只能重建集合。
示例:
import chromadb
client = chromadb.EphemeralClient()
# 上文用到的定义,直接搬过来,保证这段能独立跑
col = client.create_collection(
name="kb_notes",
metadata={"description": "知识库", "version": "1"},
configuration={"hnsw": {"space": "cosine", "ef_search": 100}},
embedding_function=None,
)
# 修改名字
# 想保留老字段得自己先读出来再合并
new_meta = {**(col.metadata or {}), "description": "新描述"}
col.modify(metadata=new_meta)
print(col.metadata)
# 输出:
# {'description': '新描述', 'version': '1'}
# 修改名字,version 字段将丢失
col.modify(name="kb_notes_v2", metadata={"description": "新描述2"})
print(col.name) # kb_notes_v2
print(col.metadata) # {'description': '新描述2'}
# 修改索引参数
col.modify(configuration={"hnsw": {"ef_search": 200}})
print(col.configuration["hnsw"]["ef_search"]) # 200