文档菜单
文档首页
/ / /
Rust 驱动
/ /

Atlas 搜索索引

本页内容

  • 概述
  • 创建搜索索引模型
  • 示例
  • 创建搜索索引
  • 示例
  • 创建多个搜索索引
  • 示例
  • 列出搜索索引
  • 示例
  • 更新搜索索引
  • 示例
  • 删除搜索索引
  • 示例
  • 附加信息
  • API 文档

本指南介绍了如何创建和管理 Atlas Search 索引。这些索引允许您使用 MongoDB 的 Atlas Search 功能,在 Atlas 集群中存储的数据上执行快速全文搜索。Atlas Search 索引通过指定要索引的字段、这些字段的索引方式以及其他可选设置来配置 Atlas Search 的行为。有关 Atlas Search 索引的更多信息,请参阅Atlas Search 文档.

本指南解释了如何执行以下操作来管理您的 Atlas Search 索引

注意

本指南中的示例访问的是posts 集合,该集合位于 sample_training 数据库中,它是 Atlas 示例数据集之一。有关导入 Atlas 示例数据的说明,请参阅 Atlas 文档中的 加载数据

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

注意

实例化模型

Rust 驱动程序为某些结构类型实现了 Builder 设计模式,包括 SearchIndexModel。您可以使用 builder() 方法通过链式选项构建方法构建每个类型的实例。

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

  • definition(),它接受一个 BSON 文档参数并设置您的索引定义

  • name(),它接受一个字符串参数并设置您的索引名称

传递给 definition() 构建方法的 BSON 文档必须包含 mappings 字段。为了自动索引集合中所有受支持的字段,通过将嵌套字段 mappings.dynamic 设置为 true 启用动态映射。为了仅索引指定的字段,通过将嵌套字段 mappings.dynamic 设置为 false 并包括您想要索引的字段列表启用静态映射。

提示

Atlas Search 字段映射

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

以下示例创建了一个名为 example_index 的索引的规范,在 SearchIndexModel 实例中。代码设置了一个静态映射,仅索引 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() 方法在集合上创建 Atlas Search 索引。此方法接受一个索引模型作为参数,该模型在 SearchIndexModel 实例中指定。

以下示例在posts集合上创建了一个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索引。此方法接受一个参数,即索引模型列表,指定为SearchIndexModel实例的向量。

以下示例在posts集合上创建了两个名为dynamic_indexstatic_index的Atlas Search索引。代码为每个索引创建了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 Atlas Search indexes:\n{:?}", result);
Created Atlas Search indexes:
["dynamic_index", "static_index"]

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

以下示例访问了本页 创建多个搜索索引 部分中创建的 Atlas Search 索引的信息。该代码调用 list_search_indexes() 方法并输出集合上的所有 Atlas 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": [...] }

提示

有关迭代游标的更多信息,请参阅使用游标访问数据 指南。

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

  • 要更新的索引名称

  • 修改后的索引定义文档

以下示例更新了在本页“创建多个搜索索引”部分创建的名为 static_index 的 Atlas Search 索引。代码创建了一个新的索引定义文档,指示索引使用动态映射而不是静态映射。然后,代码调用 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() 方法来删除 Atlas Search 索引。此方法接受要删除的索引名称作为参数。

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

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

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

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

要了解本指南中提到的方法和类型,请参阅以下API文档

返回

索引