Docs 菜单
Docs 主页
/ / /
Rust 驱动程序
/ /

Atlas Search和 Vector Search 索引

在本指南中,您可以学习;了解如何创建和管理Atlas Search和 Vector Search 索引。这些索引允许您使用以下功能:

  • Atlas Search:执行快速全文搜索

  • Atlas Vector Search:对向量嵌入执行语义(相似度)搜索

Atlas Search和 Vector Search 索引指定要索引的字段、索引这些字段的方式以及设立其他可选配置。

本指南介绍了如何执行以下操作来管理Atlas Search和 Vector Search 索引:

注意

样本数据

本指南中的示例使用 sample_mflix数据库中的 embedded_movies集合,该数据库是Atlas示例数据集之一。有关导入Atlas示例数据的说明,请参阅Atlas文档中的加载样本数据

要创建 Atlas Search 索引,您必须首先构建一个用于设置索引规范的SearchIndexModel实例。 要开始构建SearchIndexModel实例,请调用SearchIndexModel::builder()方法。

注意

实例化模型

Rust驾驶员实现了用于创建某些结构体类型(包括SearchIndexModel的 Builder 设计模式。 您可以使用builder()方法通过链接选项构建器方法来构造每种类型的实例。

Rust 驱动程序提供以下SearchIndexModel构建器方法:

构建器方法
Parameter Type
说明

definition()

Document

指定索引定义。如果您省略此设置,驱动程序会使用动态映射创建 Atlas Search 索引。

name()

String

设置索引名称。如果省略此设置,驾驶员会将名称设置为 default

index_type()

SearchIndexType

设置索引类型。如果省略此设置,驾驶员将默认创建Atlas Search索引。

要了解有关 Atlas Search 字段映射的更多信息,请参阅 Atlas 文档中的定义字段映射

要学习;了解有关定义Atlas Vector Search索引的更多信息,请参阅Atlas文档中的如何为向量搜索的字段编制索引

以下示例创建一个 SearchIndexModel实例,为名为 search_idx 的索引提供规范。该代码指定了 titlereleased 字段的静态映射:

let def = doc! { "mappings": doc! {
"dynamic": false,
"fields": {
"title": {"type": "string"},
"released": {"type": "date"}
}
}};
let idx_model = SearchIndexModel::builder()
.definition(def)
.name("search_idx".to_string())
.index_type(SearchIndexType::Search)
.build();

以下示例创建一个 SearchIndexModel 实例,以便为名为 vs_idx 的索引提供规范。代码将嵌入路径指定为 plot_embedding,索引 1536 个维度,并使用 "euclidean" 向量相似性函数:

let def = doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean",
}]
};
let idx_model = SearchIndexModel::builder()
.definition(def)
.name("vs_idx".to_string())
.index_type(SearchIndexType::VectorSearch)
.build();

您可以通过在 Collection 实例上调用 create_search_index() 方法,在集合上创建 Atlas Search 或 Vector Search 索引。此方法接受一个以 SearchIndexModel 实例指定的索引模型作为参数。

以下示例在embedded_movies collection 上创建 Atlas Search 搜索索引。该代码创建一个SearchIndexModel ,用于设置索引名称并启用动态映射。 然后,代码将SearchIndexModel实例传递给create_search_index()方法以创建 Atlas Search 索引:

let idx_model = SearchIndexModel::builder()
.definition(doc! { "mappings": doc! {"dynamic": true} })
.name("example_index".to_string())
.build();
let result = my_coll.create_search_index(idx_model).await?;
println!("Created Atlas Search index:\n{}", result);
Created Atlas Search index:
"example_index"

您可以通过在 Collection 实例上调用 create_search_indexes() 方法创建多个 Atlas Search 和 Vector Search 索引。此方法接受 SearchIndexModel 实例的向量作为参数。

此示例将执行以下动作:

  1. 创建一个 SearchIndexModel实例,指定名为 as_idx 的Atlas Search索引

  2. 创建 SearchIndexModel实例,指定名为 vs_idx 的Atlas Vector Search索引

  3. 将两个 SearchIndexModel 实例的 vec 传递给 create_search_indexes() 方法

  4. embedded_movies集合上创建Atlas Search和 Vector Search 索引

let as_idx = SearchIndexModel::builder()
.definition(doc! { "mappings": doc! {"dynamic": true} })
.name("as_idx".to_string())
.build();
let vs_idx = SearchIndexModel::builder()
.definition(doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean",
}]
})
.name("vs_idx".to_string())
.index_type(SearchIndexType::VectorSearch)
.build();
let models = vec![as_idx, vs_idx];
let result = my_coll.create_search_indexes(models).await?;
println!("Created indexes:\n{:?}", result);
Created Atlas Search indexes:
["as_idx", "vs_idx"]

您可以通过调用集合上的 list_search_indexes() 方法来访问有关集合的现有 Atlas Search 和 Vector Search 索引的信息。

以下示例访问有关在本页的 创建多个搜索索引 部分中创建的 Atlas Search 和 Vector Search 索引的信息。该代码调用 list_search_indexes() 方法,并打印集合中 Atlas Search 和 Vector Search 搜索索引的列表:

let mut cursor = my_coll.list_search_indexes().await?;
while let Some(index) = cursor.try_next().await? {
println!("{}\n", index);
}
{ "id": "...", "name": "as_idx", "status": "READY", "queryable":
true, "latestDefinitionVersion": {...}, "latestDefinition": {
"mappings": { "dynamic": true } }, "statusDetail": [...] }
{ "id": "...", "name": "vs_idx", "type": "vectorSearch", "status":
"READY", "queryable": true, ..., "latestDefinition": { "fields": [{
"type": "vector", "path": "plot_embedding", "numDimensions": 1536,
"similarity": "euclidean" }] }, "statusDetail": [...] }

提示

要了解有关遍历游标的更多信息,请参阅《使用游标访问数据》指南。

您可以通过在 Collection实例上调用 update_search_index() 方法来更新Atlas Search或 Vector Search索引。此方法接受以下参数:

  • 要更新的索引名称

  • 修改索引定义文档

以下示例更新了在本页 创建多个搜索索引部分中创建的名为 vs_index 的 Vector Search 索引。该代码创建了一个新的索引定义文档,指示索引使用 "dotProduct" 作为向量相似性函数。然后,代码调用 update_search_index() 方法来更新索引:

let name = "vs_index";
let updated_def = doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "dotProduct",
}]
};
my_coll.update_search_index(name, updated_def).await?;

您可以通过在 Collection 实例上调用 delete_search_index() 方法来删除 Atlas Search 或 Vector Search 索引。此方法接受将要删除的索引的名称作为参数。

以下示例删除了在本页面的“创建Atlas Search Atlas Search索引”部分中创建的名为 example_index 的 Atlas Search 索引。 代码将索引名称传递给delete_search_index()方法以删除索引:

let name = "example_index";
my_coll.drop_search_index(name).await?;

要了解可以使用 Rust 驱动程序创建的其他索引,请参阅索引指南。

要了解有关 Atlas Search 的更多信息,请参阅以下 Atlas 文档:

要了解有关 Atlas Vector Search 的更多信息,请参阅以下 Atlas 文档:

要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档:

后退

索引

在此页面上