Atlas 搜索索引
概述
本指南介绍了如何创建和管理 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
并包括您想要索引的字段列表启用静态映射。
示例
以下示例创建了一个名为 example_index
的索引的规范,在 SearchIndexModel
实例中。代码设置了一个静态映射,仅索引 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
集合上创建了一个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_index
和static_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文档
要了解本指南中提到的方法和类型,请参阅以下API文档