modify:改名字、改元数据、改配置

🎉摘要:了解如何使用Chromadb的modify()函数修改集合的名称、元数据和索引配置。包含方法签名、注意事项及示例,重点说明元数据整体替换和索引参数限制。

如果你要修改集合本身的属性,如集合名称、集合元数据、索引配置等信息,可以使用 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


说说我的看法
全部评论()
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号