Overview
在本指南中,您可以学习;了解如何创建和管理MongoDB Search 和MongoDB Vector Search 索引。这些索引允许您使用以下功能:
MongoDB Search 和MongoDB Vector Search 索引指定要索引的字段、索引这些字段的方式,以及设立其他可选配置。
本指南介绍如何执行以下操作来管理MongoDB Search 和MongoDB Vector Search 索引:
注意
样本数据
本指南中的示例使用 sample_mflix数据库中的 embedded_movies集合,该数据库是Atlas示例数据集之一。有关导入Atlas示例数据的说明,请参阅Atlas文档中的加载样本数据。
创建搜索索引模型
要创建MongoDB Search索引,您必须首先构建一个用于设置索引规范的 SearchIndexModel实例。要开始构建 SearchIndexModel实例,请调用 SearchIndexModel::builder() 方法。
注意
实例化模型
Rust驱动程序实现了用于创建某些结构体类型(包括 SearchIndexModel)的 Builder 设计模式。您可以使用 builder() 方法通过链接选项构建者方法来构造每种类型的实例。
Rust 驱动程序提供以下SearchIndexModel构建器方法:
构建器方法 | Parameter Type | 说明 |
|---|---|---|
|
| 指定索引定义。如果省略此设置,驾驶员将创建具有动态映射的MongoDB Search索引。 |
|
| 设置索引名称。如果省略此设置,驱动程序会将名称设置为 |
|
| 设置索引类型。如果省略此设置,驾驶员将默认创建MongoDB Search索引。 |
要学习;了解有关MongoDB Search字段映射的更多信息,请参阅Atlas文档中的定义字段映射。
要学习;了解有关定义MongoDB Vector Search 索引的更多信息,请参阅Atlas文档中的如何为向量搜索的字段编制索引。
示例模型
以下示例创建一个 SearchIndexModel实例,为名为 search_idx 的索引提供规范。该代码指定了 title 和 released 字段的静态映射:
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() 方法来在集合上创建MongoDB Search 或MongoDB Vector Search索引。此方法接受在 SearchIndexModel实例中指定的索引模型作为参数。
例子
以下示例在 embedded_movies集合上创建MongoDB搜索索引。该代码创建一个 SearchIndexModel,用于设置索引名称并启用动态映射。然后,代码将 SearchIndexModel实例传递给 create_search_index() 方法以创建MongoDB 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 MongoDB Search index:\n{}", result);
Created MongoDB Search index: "example_index"
创建多个搜索索引
您可以通过在 Collection实例上调用 create_search_indexes() 方法来创建多个MongoDB Search 和 Vector Search 索引。此方法接受 SearchIndexModel 实例向量作为参数。
例子
此示例将执行以下动作:
创建一个
SearchIndexModel实例,该实例指定名为as_idx的MongoDB搜索索引创建一个
SearchIndexModel实例,该实例指定名为vs_idx的MongoDB Vector Search索引将两个
SearchIndexModel实例的vec传递给create_search_indexes()方法在
embedded_movies集合上创建MongoDB Search 和MongoDB 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 MongoDB Search indexes: ["as_idx", "vs_idx"]
搜索索引列表
您可以通过调用集合上的 list_search_indexes() 方法访问权限有关集合的现有MongoDB Search 和MongoDB Vector Search 索引的信息。
例子
以下示例访问有关在本页的创建多个搜索索引部分中创建的MongoDB搜索和MongoDB Vector Search 索引的信息。该代码调用list_search_indexes() 方法并打印集合上的MongoDB Search 和MongoDB 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() 方法来更新MongoDB Search 或MongoDB 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() 方法来删除MongoDB Search 或MongoDB Vector Search索引。此方法接受要删除的索引名称作为参数。
例子
以下示例删除了在此页面的“创建搜索索引”部分中创建的名为 的MongoDB搜索索引。代码将索引名称传递给example_indexdelete_search_index() 方法以删除索引:
let name = "example_index"; my_coll.drop_search_index(name).await?;
更多信息
要了解可以使用 Rust 驱动程序创建的其他索引,请参阅索引指南。
要学习;了解有关MongoDB Search 的更多信息,请参阅以下Atlas文档:
要学习;了解有关MongoDB Vector Search 的更多信息,请参阅以下Atlas文档:
API 文档
要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: