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

Milvus(4):创建 Collections

1 创建 Collections

        可以通过定义 Schema、索引参数、度量类型以及创建时是否加载来创建一个 Collection。

1.1 集合概述

        Collection 是一个二维表,具有固定的列和变化的行。每列代表一个字段,每行代表一个实体。要实现这样的结构化数据管理,需要一个 Schema。要插入的每个实体都必须符合 Schema 中定义的约束条件。

        你可以确定 Collections 的方方面面,包括其 Schema、索引参数、度量类型,以及是否在创建时加载,以确保集合完全满足你的要求。要创建一个 Collection,您需要

  1. 创建 Schema
  2. 设置索引参数(可选)
  3. 创建 Collections

1.2 创建 Schema

        Schema 定义了 Collections 的数据结构。创建 Collections 时,需要根据自己的要求设计模式。以下代码片段创建了一个模式,其中包含启用的 Dynamic Field 和三个必填字段,分别命名为my_id 、my_vector 和my_varchar 。

from pymilvus import MilvusClient, DataTypeclient = MilvusClient(uri="http://localhost:19530",token="root:Milvus"
)schema = MilvusClient.create_schema(auto_id=False,enable_dynamic_field=True,
)schema.add_field(field_name="my_id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="my_vector", datatype=DataType.FLOAT_VECTOR, dim=5)
schema.add_field(field_name="my_varchar", datatype=DataType.VARCHAR, max_length=512)

1.3 (可选)设置索引参数

        在特定字段上创建索引可加快对该字段的搜索。索引记录了 Collections 中实体的顺序。如以下代码片段所示,您可以使用metric_type 和index_type 为 Milvus 选择适当的方式为字段建立索引,并测量向量嵌入之间的相似性。在 Milvus 上,您可以使用AUTOINDEX 作为所有向量场的索引类型,并根据需要使用COSINE 、L2 和IP 中的一种作为度量类型。

        如上述代码片段所示,您需要为向量场同时设置索引类型和度量类型,而只需为标量场设置索引类型。索引对于向量字段是强制性的,建议您在筛选条件中经常使用的标量字段上创建索引。

index_params = client.prepare_index_params()index_params.add_index(field_name="my_id",index_type="AUTOINDEX"
)index_params.add_index(field_name="my_vector", index_type="AUTOINDEX",metric_type="COSINE"
)

1.4 创建 Collections

        如果创建了带有索引参数的 Collection,Milvus 会在创建时自动加载该 Collection。在这种情况下,索引参数中提到的所有字段都会被索引。以下代码片段演示了如何创建带索引参数的 Collections 并检查其加载状态。

client.create_collection(collection_name="customized_setup_1",schema=schema,index_params=index_params
)res = client.get_load_state(collection_name="customized_setup_1"
)print(res)# Output
#
# {
#     "state": "<LoadState: Loaded>"
# }

        也可以创建不带任何索引参数的 Collections,然后再添加索引参数。在这种情况下,Milvus 不会在创建时加载 Collection。.以下代码片段演示了如何创建一个不带集合的 Collection,创建时集合的加载状态仍为未加载。

client.create_collection(collection_name="customized_setup_2",schema=schema,
)res = client.get_load_state(collection_name="customized_setup_2"
)print(res)# Output
#
# {
#     "state": "<LoadState: NotLoad>"
# }

1.5 设置 Collections 属性

        您可以为要创建的 Collection 设置属性,使其适合您的服务。适用的属性如下。

1.5.1 设置分片编号

        分片是 Collections 的水平切片。每个分区对应一个数据输入通道。每个 Collections 默认都有一个分片。创建 Collections 时,可根据预期吞吐量和要插入 Collections 的数据量设置适当的分片数。

        在常见情况下,每当预期吞吐量增加 500 MB/秒或要插入的数据量增加 100 GB 时,就可以考虑增加一个分片。这一建议是基于我们自己的经验,可能并不完全适合您的应用场景。你可以根据自己的需要调整这个数字,或者直接使用默认值。下面的代码片段演示了如何在创建 Collection 时设置分片数。

# 带分片号
client.create_collection(collection_name="customized_setup_3",schema=schema,# highlight-next-linenum_shards=1
)

1.5.2 启用 mmap

        Milvus 默认在所有 Collections 上启用 mmap,允许 Milvus 将原始字段数据映射到内存中,而不是完全加载它们。这样可以减少内存占用,提高 Collections 的容量。

# With mmap
client.create_collection(collection_name="customized_setup_4",schema=schema,# highlight-next-lineenable_mmap=False
)
export params='{"mmap.enabled": True
}'export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d "{\"collectionName\": \"customized_setup_5\",\"schema\": $schema,\"params\": $params
}"

1.5.3 设置 Collections TTL

        如果某个 Collection 中的数据需要在特定时间段内丢弃,可以考虑设置其 Time-To-Live (TTL),单位为秒。一旦 TTL 超时,Milvus 就会删除 Collection 中的实体。删除是异步的,这表明在删除完成之前,搜索和查询仍然可以进行。下面的代码片段将 TTL 设置为一天(86400 秒)。建议至少将 TTL 设置为几天。

client.create_collection(collection_name="customized_setup_5",schema=schema,# highlight-startproperties={"collection.ttl.seconds": 86400}# highlight-end
)

1.5.4 设置一致性级别

        创建 Collections 时,可以为集合中的搜索和查询设置一致性级别。您还可以在特定搜索或查询过程中更改 Collections 的一致性级别。

client.create_collection(collection_name="customized_setup_6",schema=schema,# highlight-nextconsistency_level="Bounded",
)

1.5.5 启用动态字段

        Collections 中的动态字段是一个保留的 JavaScript Object Notation (JSON) 字段,名为$meta。启用该字段后,Milvus 会将每个实体中携带的所有非 Schema 定义字段及其值作为键值对保存在保留字段中。

2 即时创建 Collections

        通过设置名称和向量场维度,可以立即创建一个 Collection。创建时,Milvus 会自动索引向量场并加载 Collections。

        AIGC 应用程序通常使用向量数据库作为知识库,管理用户与大型语言模型(LLMs)交互过程中产生的数据。这些知识库几乎是相似的。为了加快 Milvus Collections 在此类场景中的使用,我们提供了一种即时方法,只需两个参数,即 Collections 名称和向量场维度,即可创建一个 Collection。使用默认设置即时创建 Collections 时,以下设置适用:

  • 主字段和向量字段被添加到 Schema 中(id向量)。
  • 主字段接受整数并禁用AutoId
  • 向量字段接受浮动向量 Embeddings。
  • AUTOINDEX用于在向量字段上创建索引。
  • COSINE用于测量向量嵌入之间的相似性。
  • 启用名为$meta的储备动态字段,可将非 Schema 定义的字段及其值保存为键值对。
  • 该 Collections 会在创建时自动加载。

2.1 快速设置

        通过这种方式,您只需输入集合名称和向量场维数,即可即时创建集合。

from pymilvus import MilvusClient, DataTypeCLUSTER_ENDPOINT = "http://localhost:19530"
TOKEN = "root:Milvus"# 1. 设置一个Milvus客户端
client = MilvusClient(uri=CLUSTER_ENDPOINT,token=TOKEN 
)# 2. 在快速设置模式下创建集合
client.create_collection(collection_name="quick_setup",dimension=5
)res = client.get_load_state(collection_name="quick_setup"
)print(res)# Output
#
# {
#     "state": "<LoadState: Loaded>"
# }

2.2 使用自定义字段快速设置

        如果默认的度量类型、字段名称和数据类型不能满足您的需求,您可以按以下方式调整这些设置。

from pymilvus import MilvusClient, DataTypeCLUSTER_ENDPOINT = "http://localhost:19530"
TOKEN = "root:Milvus"# 1. 设置一个Milvus客户端
client = MilvusClient(uri=CLUSTER_ENDPOINT,token=TOKEN 
)# 2. 在快速设置模式下创建集合
client.create_collection(collection_name="custom_quick_setup",dimension=5,primary_field_name="my_id",id_type="string",vector_field_name="my_vector",metric_type="L2",auto_id=True,max_length=512
)res = client.get_load_state(collection_name="custom_quick_setup"
)print(res)# Output
#
# {
#     "state": "<LoadState: Loaded>"
# }
http://www.xdnf.cn/news/97129.html

相关文章:

  • Axure按钮设计分享:打造高效交互体验的六大按钮类型
  • 网络设备配置实战:交换机与路由器的入门到精通
  • Pytest教程:为什么Pytest要用插件模式?
  • Docker核心技术精讲:从入门到企业级实战
  • 0802api设计和实战-网络ajax请求1-react-仿低代码平台项目
  • SQL注入漏洞中会使用到的函数
  • 时序数据库 TDengine 助力石油石化业务, 平滑接替 Oracle 数据库
  • React propsTypes使用方式
  • MyBatis-Plus分页插件的使用
  • Python常用的第三方模块之【jieba库】支持三种分词模式:精确模式、全模式和搜索引擎模式(提高召回率)
  • React组件测试完全指南:从入门到实践
  • 精益数据分析(16/126):掌握关键方法,探寻创业真谛
  • 【Pandas】pandas DataFrame mod
  • 位置编码学习笔记
  • Linux:进程地址空间
  • 【LangChain4j】AI 第一弹:LangChain4j 的理解
  • 32单片机——GPIO寄存器
  • 05/06-Java入门-HelloWorld和编程工具的使用
  • c语言指针3
  • 初识分布式事务原理
  • VMware中CentOS 7虚拟机设置固定IP(NAT模式)完整教程
  • Scanpy可视化技巧--UMAP图优化
  • 数据的加载与保存
  • 基于Quill的文档编辑器开发日志(上)——前端核心功能实现与本地存储管理
  • Java 环境配置详解(Windows、macOS、Linux)
  • 新书推荐——《游·思——看世界 上》孔祥超 著
  • 【MQ篇】RabbitMQ之工作队列模式!
  • Kotlin中实现静态
  • 智能文档解析系统架构师角色定义
  • 链表系列一>两数相加