Overview
在本指南中,您可以学习;了解如何创建和管理MongoDB搜索索引。这些索引允许您使用MongoDB搜索功能对Atlas 集群中存储的数据执行快速全文搜索。 MongoDB Search索引通过指定要索引的字段、索引这些字段的方式以及其他可选设置来配置MongoDB Search 的行为。要学习;了解有关MongoDB Search 索引的更多信息,请参阅 MongoDB Search 文档。
本指南介绍如何执行以下操作来管理MongoDB搜索索引:
注意
本指南中的示例访问sample_training数据库中的 posts集合,该数据库是 Atlas 示例数据集之一。 有关导入 Atlas 样本数据的说明,请参阅 Atlas 文档中的加载样本数据。
创建搜索索引模型
要创建MongoDB Search索引,您必须首先构建一个用于设置索引规范的 SearchIndexModel实例。要开始构建 SearchIndexModel实例,请调用 SearchIndexModel::builder() 方法。
注意
实例化模型
Rust 驱动程序实现了用于创建许多不同类型的 Builder 设计模式,包括SearchIndexModel 。 您可以使用builder()方法通过链接选项构建器方法来构造每种类型的实例。
Rust 驱动程序提供以下SearchIndexModel构建器方法:
definition(),它接受 BSON 文档参数并设置索引定义name(),它接受一个字符串参数并设置索引名称
您传递给definition()构建器方法的 BSON 文档必须包含mappings字段。要自动索引集合中所有支持的字段,请将mappings.dynamic嵌套字段设置为true来启用动态映射。 要仅索引指定字段,请将mappings.dynamic嵌套字段设置为false并包含要索引的字段列表以启用静态映射。
例子
以下示例为SearchIndexModel实例中名为example_index的索引创建规范。 该代码设置静态映射以仅索引body和date字段:
let def = doc! { "mappings": doc! { "dynamic": false, "fields": { "body": {"type": "string"}, "date": {"type": "date"} } }}; let idx_model = SearchIndexModel::builder() .definition(def) .name("example_index".to_string()) .build();
创建搜索索引
您可以通过在 Collection实例上调用 create_search_index() 方法来在集合上创建MongoDB Search索引。此方法接受以下参数:
索引模型,在
SearchIndexModel实例中指定索引选项,在CreateSearchIndexOptions实例中指定
例子
以下示例在 posts集合上创建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 索引。此方法接受以下参数:
索引模型列表,指定为
SearchIndexModel实例的向量索引选项,在
CreateSearchIndexOptions实例中指定
例子
以下示例在 posts集合上创建了两个名为 dynamic_index 和 static_index 的MongoDB搜索索引。该代码为每个索引创建 SearchIndexModel 实例,以指定索引名称和定义。然后,代码将这些模型作为向量传递给 create_search_indexes() 方法并创建索引:
let dyn_idx = SearchIndexModel::builder() .definition(doc! { "mappings": doc! {"dynamic": true} }) .name("dynamic_index".to_string()) .build(); let static_idx = SearchIndexModel::builder() .definition(doc! {"mappings": doc! { "dynamic": false, "fields": { "title": {"type": "string"}}}}) .name("static_index".to_string()) .build(); let models = vec![dyn_idx, static_idx]; let result = my_coll.create_search_indexes(models).await?; println!("Created MongoDB Search indexes:\n{:?}", result);
Created MongoDB Search indexes: ["dynamic_index", "static_index"]
搜索索引列表
您可以通过调用集合上的 list_search_indexes() 方法访问权限有关集合的现有MongoDB Search 索引的信息。此方法接受以下参数:
要检索以下内容的索引名称:
聚合选项,在AggregateOptions实例中指定
索引选项,在 ListSearchIndexOptions实例中指定
例子
以下示例访问有关在本页的创建多个搜索索引部分中创建的MongoDB搜索索引的信息。该代码调用 list_search_indexes()方法并为每个参数传递值None ,这指示驾驶员使用默认选项返回有关所有MongoDB Search 索引的信息。然后,代码输出搜索索引:
let mut cursor = my_coll.list_search_indexes().await?; while let Some(index) = cursor.try_next().await? { println!("{}\n", index); }
{ "id": "...", "name": "dynamic_index", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": true } }, "statusDetail": [...] } { "id": "...", "name": "static_index", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": false, "fields": { "title": { "type": "string" } } } }, "statusDetail": [...] }
提示
要了解有关迭代游标的更多信息,请参阅 Access Data by Using a Cursor(使用游标访问数据)指南。
更新搜索索引
您可以通过在 Collection实例上调用 update_search_index() 方法来更新MongoDB Search索引。此方法接受以下参数:
要更新的索引名称
修改索引定义文档
索引选项,在 UpdateSearchIndexOptions 实例中指定
例子
以下示例更新了在此页面的“创建多个搜索索引”部分中创建的名为 的MongoDB搜索索引。该代码会创建一个新的索引定义文档,指示索引使用动态映射而不是静态映射。然后,代码调用static_index update_search_index()方法来更新索引:
let name = "static_index"; let definition = doc! { "mappings": doc! {"dynamic": true} }; my_coll.update_search_index(name, definition).await?;
删除搜索索引
您可以通过在 Collection实例上调用 delete_search_index() 方法来删除MongoDB Search索引。此方法接受以下参数:
要删除的索引名称
索引选项,在 DropSearchIndexOptions实例中指定
例子
以下示例删除了在此页面的“创建搜索索引”部分中创建的名为 的MongoDB搜索索引。代码将索引名称传递给example_indexdelete_search_index() 方法以删除索引:
let name = "example_index"; my_coll.drop_search_index(name).await?;
更多信息
要了解可以使用 Rust 驱动程序创建的其他索引,请参阅索引指南。
要学习;了解有关MongoDB Search 的更多信息,请参阅以下Atlas文档:
API 文档
要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: