Atlas Search 索引
Overview
在本指南中,您可以了解如何创建和管理Atlas Search 索引。 这些索引允许您使用 MongoDB 的 Atlas Search 功能对 Atlas 集群中存储的数据执行快速全文搜索。 Atlas Search 索引通过指定要索引的字段、索引这些字段的方式以及其他可选设置来配置 Atlas Search 的行为。 要了解有关 Atlas Search 索引的更多信息,请参阅 Atlas Search 文档。
本指南介绍了如何执行以下操作来托管您的 Atlas Search 索引:
注意
本指南中的示例访问sample_training
数据库中的 posts
集合,该数据库是 Atlas 示例数据集之一。 有关导入 Atlas 样本数据的说明,请参阅 Atlas 文档中的加载样本数据。
创建搜索索引模型
要创建 Atlas Search 索引,您必须首先构建一个用于设置索引规范的SearchIndexModel
实例。 要开始构建SearchIndexModel
实例,请调用SearchIndexModel::builder()
方法。
注意
实例化模型
Rust驾驶员实现了用于创建某些结构体类型(包括SearchIndexModel
的 Builder 设计模式。 您可以使用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()
方法,在集合上创建 Atlas Search 索引。本方法接受一个以 SearchIndexModel
实例指定的索引模型作为参数。
例子
以下示例在posts
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 索引。此方法接受索引模型列表作为参数,指定为 SearchIndexModel
实例的向量。
例子
以下示例在collection上创建了两个名为dynamic_index
static_index
和posts
的 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": [...] }
提示
要了解有关迭代游标的更多信息,请参阅 Access Data by Using a Cursor(使用游标访问数据)指南。
更新搜索索引
您可以通过在实例上调用方法来更新 Atlas Searchupdate_search_index()
Collection
索引。此方法接受以下参数:
要更新的索引名称
修改索引定义文档
例子
下面的示例更新了在本页 创建多个搜索索引部分创建的名为 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 索引。此方法接受将要删除的索引的名称作为参数。
例子
以下示例删除了在本页面的“创建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 文档:
API 文档
要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: