Docs 菜单
Docs 主页
/ /

MongoDB搜索索引

在本指南中,您可以学习;了解如何创建和管理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并包含要索引的字段列表以启用静态映射。

提示

MongoDB搜索字段映射

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

以下示例为SearchIndexModel实例中名为example_index的索引创建规范。 该代码设置静态映射以仅索引bodydate字段:

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索引。此方法接受以下参数:

以下示例在 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_indexstatic_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 文档:

后退

索引

在此页面上