跳到主要内容

Collection 说明

在 Milvus 上,您可以创建多个 collection 来管理数据,并将数据作为 entity 插入到 collection 中。Collection 和 entity 类似于关系数据库中的表和记录。本页帮助您了解 collection 和相关概念。

Collection

Collection 是一个具有固定列和可变行的二维表。每列代表一个 field,每行代表一个 entity。

下图显示了一个包含八列和六个 entity 的 collection。

Collection Explained

Schema 和 Field

描述一个对象时,我们通常会提到它的属性,如大小、重量和位置。您可以将这些属性用作 collection 中的 field。每个 field 都有各种约束属性,如数据类型和向量 field 的维度。您可以通过创建 field 并定义它们的顺序来形成 collection 的 schema。有关可能适用的数据类型,请参阅 Schema 说明

您应该在要插入的 entity 中包含所有 schema 定义的 field。要使其中一些成为可选的,请考虑启用动态 field。有关详细信息,请参阅 Dynamic Field

  • 使它们可为空或设置默认值

    有关如何使 field 可为空或设置默认值的详细信息,请参阅 Nullable & Default

  • 启用动态 field

    有关如何启用和使用动态 field 的详细信息,请参阅 Dynamic Field

Primary key 和 AutoId

与关系数据库中的主要 field 类似,collection 有一个 primary field 来区分一个 entity 与其他 entity。Primary field 中的每个值在全局范围内是唯一的,对应一个特定的 entity。

如上图所示,名为 id 的 field 作为 primary field,第一个 ID 0 对应标题为 The Mortality Rate of Coronavirus is Not Important 的 entity。不会有任何其他 entity 的 primary field 为 0。

Primary field 只接受整数或字符串。插入 entity 时,默认情况下您应该包含 primary field 值。但是,如果您在创建 collection 时启用了 AutoId,Milvus 将在数据插入时生成这些值。在这种情况下,请从要插入的 entity 中排除 primary field 值。

有关更多信息,请参阅 Primary Field & AutoId.

Index

在特定 field 上创建 index 可以提高搜索效率。建议您为服务依赖的所有 field 创建 index,其中向量 field 上的 index 是必需的。

Entity

Entity 是在 collection 中共享同一组 field 的数据记录。同一行中所有 field 的值组成一个 entity。

您可以在 collection 中插入所需数量的 entity。但是,随着 entity 数量的增加,它占用的内存大小也会增加,影响搜索性能。

有关更多信息,请参阅 Schema 说明

Load 和 Release

加载 collection 是在 collection 中进行相似性搜索和查询的先决条件。当您加载 collection 时,Milvus 将所有 index 文件和每个 field 中的原始数据加载到内存中,以便快速响应搜索和查询。

搜索和查询是内存密集型操作。为了节省成本,建议您释放当前未使用的 collection。

有关更多详细信息,请参阅 Load & Release

Search 和 Query

创建 index 并加载 collection 后,您可以通过提供一个或多个查询向量来开始相似性搜索。例如,当接收到搜索请求中携带的查询向量表示时,Milvus 使用指定的 metric 类型来测量查询向量与目标 collection 中向量之间的相似性,然后返回语义上与查询相似的向量。

您还可以在搜索和查询中包含元数据过滤,以提高结果的相关性。请注意,元数据过滤条件在查询中是必需的,但在搜索中是可选的。

有关适用的 metric 类型的详细信息,请参阅 Metric Types

有关搜索和查询的更多信息,请参阅 Search & Rerank 章节中的文章,其中基本功能包括:

此外,Milvus 还提供增强功能来提高搜索性能和效率。它们默认是禁用的,您可以根据服务要求启用和使用它们。它们是:

Partition

Partition 是 collection 的子集,与其父 collection 共享相同的 field 集,每个都包含 entity 的子集。

通过将 entity 分配到不同的 partition 中,您可以创建 entity 组。您可以在特定 partition 中进行搜索和查询,让 Milvus 忽略其他 partition 中的 entity,从而提高搜索效率。

有关详细信息,请参阅 Manage Partitions

Shard

Shard 是 collection 的水平切片。每个 shard 对应一个数据输入通道。每个 collection 默认有一个 shard。您可以在创建 collection 时根据预期吞吐量和要插入到 collection 中的数据量设置适当的 shard 数量。

有关如何设置 shard 数量的详细信息,请参阅 Create Collection

Alias

您可以为 collection 创建别名。一个 collection 可以有多个别名,但 collection 不能共享别名。当接收到针对 collection 的请求时,Milvus 根据提供的名称定位 collection。如果提供的名称对应的 collection 不存在,Milvus 会继续将提供的名称作为别名进行定位。您可以使用 collection 别名来适应不同场景的代码。

有关更多详细信息,请参阅 Manage Aliases

Function

您可以为 Milvus 设置函数,以在创建 collection 时派生 field。例如,全文搜索功能使用用户定义的函数从特定的 varchar field 派生稀疏向量 field。有关全文搜索的更多信息,请参阅 Full Text Search

一致性级别

分布式数据库系统通常使用一致性级别来定义数据节点和副本之间的数据一致性。您可以在创建 collection 或在 collection 内进行相似性搜索时设置单独的一致性级别。适用的一致性级别包括 StrongBounded StalenessSessionEventually

有关这些一致性级别的详细信息,请参阅 Consistency Level