创建 Atlas Search 索引
Atlas Search 索引是一种数据结构,它以易于搜索的格式对数据进行分类。它是术语与包含这些术语的文档之间的映射。 Atlas Search 索引可以使用某些标识符更快地检索文档。您必须配置 Atlas Search 索引,才能使用 Atlas Search 查询 Atlas 集群中的数据。
您可在单个字段或多个字段上创建 Atlas Search 索引。我们建议您对经常用于排序或筛选数据的字段建立索引,以便在查询时快速检索包含相关数据的文档。
您可以通过 Atlas UI、API、Atlas CLI 和 Terraform 为 Atlas 集群上除 时间序列集合之外的所有集合创建 Atlas Search 索引。
先决条件
要创建 Atlas Search 索引,您必须拥有符合以下条件的 Atlas 集群:
任何集群层上的 MongoDB
4.2
或更高版本。要为其创建 Atlas Search 索引的集合。
必需的访问权限
下表列出了每个角色支持的访问模式。
角色 | 操作 | Atlas UI | Atlas API | Atlas Search API | Atlas CLI |
---|---|---|---|---|---|
Project Data Access Read Only 或更高级别的角色 | 用于查看 Atlas Search 分析器和索引。 | ✓ | ✓ | ||
Project Data Access Admin 或更高级别的角色 | 创建和管理 Atlas Search 分析器和索引,并将角色分配给 API 密钥。 | ✓ | ✓ | ✓ | ✓ |
✓ | ✓ | ||||
为 API 密钥创建访问列表条目,并从 API 密钥访问列表中显示的客户端发送请求。 | ✓ | ✓ | |||
使用 Atlas 用户界面或 API 创建、查看、编辑和删除 Atlas Search 索引。 | ✓ | ✓ | ✓ |
您必须至少拥有要创建索引的数据库的readWriteAnyDatabase
角色或readWrite
访问权限。要了解详情,请参阅内置角色或特定特权。
免费和共享集群限制
您创建的内容不能超过:
在
M0
集群上具有 3 个索引。M2
集群上有 5 个索引。M5
集群上有 10 个索引。
您可以在
M10+
集群上创建的索引数量没有限制。要从Compass创建 Atlas Search 索引,您必须有一个运行 MongoDB 7的
M10
或更高级别的 Atlas 集群。 0或更高版本。
估计索引的大小
您可以通过在集合的子集上创建索引来估计索引的大小:
抽取数据样本并使用样本数据创建新集合。
在包含样本数据的集合上创建搜索索引。
注意
样本数据的索引定义必须与要在完整集合上创建的索引定义相同。
根据数据的总大小扩展样本数据索引的大小。
estimated-index-size = ( subset-data-index-size / subset-data-size ) x total-collection-data-size
例子
此示例使用sample_mflix.movies
命名空间。我们首先运行$sample
从movies
集合中随机选择10文档,并创建一个名为sample_data
的新集合,其中包含$sample
输出文档:
db.movies.aggregate([ { $sample: { size: 10 } }, { $out: "sample_data" } ])
接下来,对于使用$out
添加到sample_data
集合的$sample
输出数据,我们仅在title
字段上创建索引:
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "string" } } } }
包含10文档的sample_data
集合中title
字段的索引大小为4 。 34 KB。 sample_data
集合的大小为14 。 19 KB。 movies
集合的总大小为32 。 54 MB,即32540 KB。我们使用以下计算来估计整个movies
集合的索引大小:
4.34 KB / 14.19 KB = 0.30584918957012 KB (per document) 0.30584918957012 KB x 32540 KB = 9952.3326286117048 KB 9265.466 KB x 0.001 MB = 9.952332628611705 MB
movies
集合中title
字段的估计大小索引大小为9 。 95 MB。但是, movies
集合的索引大小可能会根据其他非采样文档中标题的长度而有所不同。
创建 Atlas Search 索引
您可以使用 Atlas 用户界面、MongoDB Compass 来创建 Atlas Search 索引,也可以使用mongosh
、Atlas CLI、 API 或受支持的 MongoDB 驱动程序以您的首选语言以编程方式创建 Atlas Search 索引。
注意
Atlas Search 索引必须应用于整个集合,而不仅仅是集合的一部分。
➤ 使用选择语言下拉菜单设置本节中示例的语言。
要创建 Atlas Search 索引,请执行以下操作:
发送POST
请求。
向search/indexes
端点发送POST
请求。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \ --data ' { "collectionName": "string", "database": "string", "name": "string", "type": "search", "definition": { "analyzer": "lucene.<analyzer>", "analyzers": [ { "charFilters": [ ... ], "name": "string", "tokenFilters": [ ... ], "tokenizer": { ... } } ], "mappings": { "dynamic": true | false, "fields": { "property1": {}, ... } }, "searchAnalyzer": "lucene.<analyzer>", "storedSource": { "include | exclude": [...] }, "synonyms": [ { "analyzer": "lucene.<analyzer>", "name": "string", "source": { "collection": "string" } } ] } }'
要了解有关此端点的语法和参数的更多信息,请参阅创建端点。
您还可以将 Atlas Search 与通过 Atlas CLI 创建的本地 Atlas 部署结合使用。要了解详情,请参阅创建本地 Atlas 部署。
为云部署创建 Atlas Search 索引
要使用 Atlas CLI 为集群创建搜索索引,请运行以下命令:
atlas clusters search indexes create [indexName] [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas clusters searchindexes create 的 Atlas CLI 文档。
为本地部署创建 Atlas Search 索引
要使用 Atlas CLI 为指定部署创建搜索索引,请运行以下命令:
atlas deployments search indexes create [indexName] [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas部署 searchindexes create 的 Atlas CLI 文档。
例子
以下示例向您展示如何使用atlas clusters
或atlas deployments
命令通过配置文件以非交互模式创建 Atlas Search 索引。
对于$search
查询,您可以创建默认search
类型的索引。
步骤
要从 Atlas 用户界面创建 Atlas Search 索引,请执行以下操作:
在 AtlasClusters 中,转到项目的 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。
此时会显示“集群”页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击Services标题下的Atlas Search 。
从Select data source下拉列表中,选择您的集群并单击Go to Atlas Search 。
显示Atlas Search页面。
单击集群的对应 Browse Collections 按钮。
展开数据库并选择集合。
单击集合的Search Indexes标签页。
显示Atlas Search页面。
单击集群名称。
单击 Atlas Search 标签页。
显示Atlas Search页面。
输入Index Name ,然后设置Database and Collection 。
在Index Name字段中,指定索引的名称。
索引名称在其命名空间内必须是唯一的。索引名称默认为default 。您可以接受默认名称,也可以指定其他名称。
如果将索引命名为
default
,则无需在$search管道阶段指定index
参数。如果您为索引指定自定义名称,则必须在index
参数中指定该名称。在Database and Collection部分中,展开数据库,然后选择集合名称。
提示
如果您从Data Explorer导航到此页面,则可以跳过此步骤,因为 Atlas 会预先选择您在Data Explorer中选择的数据库和集合。
如果使用了 Visual Editor,则请单击 Next。
查看 部分中的默认 Atlas SearchIndex Configurations 索引配置设置。
您可以使用默认索引定义,也可以指定自定义索引定义:
字段名称 | 说明 | 必要性 |
---|---|---|
Index Analyzer | Optional | |
Query Analyzer | Optional | |
Dynamic Mapping | 指定字段的动态或静态映射。要禁用动态映射,请将 对应于 | 必需 |
字段名称 | 说明 | 必要性 |
---|---|---|
analyzer | Optional | |
searchAnalyzer | Optional | |
mappings.dynamic | 指定字段的动态或静态映射。要禁用动态映射,请将 | 必需 |
要了解有关这些搜索索引定义设置的更多信息,请参阅查看 Atlas Search 语法。
如果您对默认配置感到满意,请跳过。如果您希望优化 Atlas Search 索引,请继续执行下一步。
优化 Atlas Search 索引,配置其他设置。
如果您使用的是 Visual Editor:
单击 Refine Your Index 更改以下任何设置。
字段名称说明必要性Field Mappings如果 Index Configurations 部分中的 Dynamic Mapping 处于禁用状态,则为必填项。
仅建议高级用户定义自己的字段映射。
指定要编制索引的字段。要添加字段,必须执行以下操作:
点击 Add Field 打开 Add Field Mapping 窗口。
指定关于字段的以下信息:
单击 Add 添加字段。
您可以选择单击 Actions 列中字段的省略号 (...) 图标来执行以下操作:
单击 Edit 修改字段的设置。
单击 Add Data Type 为该字段配置其他数据类型。
点击 Delete 将该字段从索引中删除。
您可以按任意顺序定义 Atlas Search 索引定义中的字段。
对应于
mappings.fields
JSON 设置。可选的Stored Source Fields指定要在 Atlas Search 上存储的字段。您可以选择以下选项之一:
None -(默认)如果选择,Atlas Search 不会存储任何字段。
All - 如果选择,Atlas Search 会存储文档中的所有字段。
Specified - 如果选择,Atlas Search 会存储
_id
和您指定的字段。您可以通过执行以下操作来指定字段:从 Field Name 列的下拉列表中选择要存储在 Atlas Search 中的字段。
单击 Add 将字段添加到要存储的字段列表中。
单击 Add Field 并对要添加到列表中的每个字段重复步骤 a 和 b。
(可选)单击以下选项之一:
Edit 以选择其他字段。
Delete 从要存储的字段列表中删除字段。
All Except Specified - 如果选中,Atlas Search 会从 Atlas Search 的存储中排除特定字段。
从 Field Name 列的下拉列表中选择要排除的字段。
单击 Add 将字段添加到要排除的字段列表中。
单击 Add Field,然后对列表中要排除的每个字段重复步骤 a 和 b。
(可选)单击以下选项之一:
Edit 以选择其他字段。
Delete 从要排除的字段列表中删除该字段。
要了解有关存储字段的更多信息,请参阅在 Atlas Search 索引中定义存储的源字段。
对应于
storedSource
JSON 设置。OptionalSynonyms Mappings指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射。
要添加同义词映射,您必须为每个同义词指定以下设置:
Synonym mapping name - 此标签用于标识查询时要引用的同义词映射。必须指定一个唯一值。不能指定空字符串值。
Synonym source collection — 此标签用于标识与 Atlas Search 索引位于同一数据库中的 MongoDB 集合。此集合中的文档使用同义词源集合文档中描述的格式。您还可以添加空集合或加载示例集合。
Analyzer — 标识用于此同义词映射的分析器的标签。
您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 (
"lucene.standard"
)。您可以指定任何 Atlas Search 分析器,但以下分析器除外:
lucene.kuromoji
lucene.cjk
daitchMokotoffSoundex 令牌筛选器
nGram 词元筛选器
edgeGram 词元筛选器
shingle 词元过滤器
对应于
synonyms
JSON 设置。可选。单击 Save Changes(连接)。
如果您使用的是 Atlas Search JSON Editor ,请执行以下操作:
将以下任意设置添加到索引中:
字段名称说明必要性mappings.fields
如果
mappings.dynamic
为false
,则为必填项。仅建议高级用户定义自己的字段映射。
指定要编制索引的字段。要了解更多信息,请参阅定义字段映射。
您可以按任意顺序定义 Atlas Search 索引定义中的字段。
可选的storedSource
指定要存储在 Atlas Search 上的文档中的字段。值可以是以下之一:
true
— 存储所有字段false
— 不存储任何字段指定在存储中包括 (
include
) 或排除 (exclude
) 的字段的对象
如果省略,则默认值为
false
。storedSource
仅适用于运行以下版本之一的 Atlas 集群:MongoDB 5.0.6 +
MongoDB 6.0+
MongoDB 7.0+
您可以在 Atlas Search 上存储所有支持的数据类型的字段。要了解有关语法和字段的更多信息,请参阅在 Atlas Search 索引中定义存储的源字段。
Optionalsynonyms
指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射。
您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 (
"lucene.standard"
)。Optional要了解有关这些搜索索引定义设置的更多信息,请参阅查看 Atlas Search 语法。
单击 Next(连接)。
可选。 如果使用Visual Editor ,则可以保存或删除索引定义草稿。
单击 Cancel(连接)。
点击 Save Draft 或 Delete Draft。
重要
在有待处理的索引草稿时,您无法创建新索引。
要了解有关使用索引草稿创建索引的更多信息,请参阅恢复或删除 Atlas Search 索引草稿。
喜欢通过观看视频来学习?
本视频教程演示如何创建不同复杂程度的 Atlas Search 索引。
时长:15 分钟
使用mongosh
连接。
要了解更多信息,请参阅通过mongosh
连接。
创建 Atlas Search 索引。
使用db.collection.createSearchIndex()
方法。
命令具有以下语法。如果省略索引名称,Atlas Search 会将索引命名为 default
。要了解详情,请参阅查看 Atlas Search 索引语法。
db.<collection>.createSearchIndex( "<index-name>", { /* search index definition */ } )
例子
要创建名为example-index
的索引来动态索引movies
集合中的字段,请运行以下命令:
db.movies.createSearchIndex( "example-index", { mappings: { dynamic: true } } )
example-index
在 MongoDB Compass 中连接到您的 Atlas 集群。
打开Compass并连接到 Atlas 集群。有关连接的详细说明,请参阅通过 Compass 连接。
要使用C 驱动程序创建 Atlas Search 索引,请在应用程序中定义搜索索引并调用mongoc_collection_command_simple()
方法。
注意
Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行之前返回。要确定搜索索引的当前状态,请使用$listSearchIndexes
管道阶段运行聚合操作。
将以下代码示例复制到该文件中。
以下示例应用程序指定createSearchIndexes
命令来定义搜索索引,该索引可为集合中的字段动态编制索引。然后,应用程序将命令和搜索索引信息转换为BSON ,并将此信息传递给mongoc_collection_command_simple()
方法以创建搜索索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。
int main (void) { mongoc_client_t *client = NULL; mongoc_collection_t *collection = NULL; mongoc_database_t *database = NULL; bson_error_t error; bson_t cmd = BSON_INITIALIZER; bool ok = true; mongoc_init(); // Connect to your Atlas deployment client = mongoc_client_new("<connectionString>"); if (!client) { fprintf(stderr, "Failed to create a MongoDB client.\n"); ok = false; goto cleanup; } // Access your database and collection database = mongoc_client_get_database(client, "<databaseName>"); collection = mongoc_database_get_collection(database, "<collectionName>"); // Specify the command and the new index const char *cmd_str = BSON_STR({ "createSearchIndexes" : "<collectionName>", "indexes" : [ { "definition" : {"mappings" : {"dynamic" : true}}, "name" : "<indexName>" } ] }); // Convert your command to BSON if (!bson_init_from_json(&cmd, cmd_str, -1, &error)) { fprintf(stderr, "Failed to parse command: %s\n", error.message); ok = false; goto cleanup; } // Create the Atlas search index by running the command if (!mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { fprintf(stderr, "Failed to run createSearchIndexes: %s\n", error.message); ok = false; goto cleanup; } printf ("Index created!\n"); cleanup: mongoc_collection_destroy (collection); mongoc_client_destroy (client); mongoc_database_destroy (database); bson_destroy (&cmd); mongoc_cleanup (); return ok ? EXIT_SUCCESS : EXIT_FAILURE; }
您还可以一次创建多个 Atlas Search 索引。在以下示例中,将要创建的每个搜索索引定义为indexes
数组中的文档。然后,将命令和搜索索引信息转换为BSON ,并调用mongoc_collection_command_simple()
方法来创建搜索索引:
int main (void) { mongoc_client_t *client = NULL; mongoc_collection_t *collection = NULL; mongoc_database_t *database = NULL; bson_error_t error; bson_t cmd = BSON_INITIALIZER; bool ok = true; mongoc_init(); // Connect to your Atlas deployment client = mongoc_client_new("<connectionString>"); if (!client) { fprintf(stderr, "Failed to create a MongoDB client.\n"); ok = false; goto cleanup; } // Access your database and collection database = mongoc_client_get_database(client, "<databaseName>"); collection = mongoc_database_get_collection(database, "<collectionName>"); // Specify the command and the new indexes const char *cmd_str = BSON_STR({ "createSearchIndexes" : "<collectionName>", "indexes" : [{ // Add your search index definition fields here "name" : "<firstIndexName>" }, { // Add your search index definition fields here "name" : "<secondIndexName>" }] }); // Convert your command to BSON if (!bson_init_from_json(&cmd, cmd_str, -1, &error)) { fprintf(stderr, "Failed to parse command: %s\n", error.message); ok = false; goto cleanup; } // Create the Atlas search indexes by running the command if (!mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { fprintf(stderr, "Failed to run createSearchIndexes: %s\n", error.message); ok = false; goto cleanup; } printf ("Indexes created!\n"); cleanup: mongoc_collection_destroy (collection); mongoc_client_destroy (client); mongoc_database_destroy (database); bson_destroy (&cmd); mongoc_cleanup (); return ok ? EXIT_SUCCESS : EXIT_FAILURE; }
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要创建索引的数据库和集合。
索引名称。如果省略索引名称,Atlas Search 会将索引命名为
default
。
搜索索引定义。要了解更多信息,请参阅查看 Atlas Search 索引语法。
要使用C++ 驱动程序创建 Atlas Search 索引,请在应用程序中定义搜索索引并调用create_one()
方法。
注意
Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行之前返回。要确定搜索索引的当前状态,请对搜索索引视图实例调用list()
方法。
将以下代码示例复制到该文件中。
以下示例应用程序将搜索索引名称和定义传递给search_index_model()
方法,以便对集合中的字段动态编制索引。然后,应用程序将搜索索引规范传递给create_one()
方法以创建搜索索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。
using bsoncxx::builder::basic::kvp; using bsoncxx::builder::basic::make_document; using namespace mongocxx; int main() { try { // Connect to your Atlas deployment mongocxx::instance instance{}; mongocxx::uri uri("<connectionString>"); mongocxx::client client(uri); // Access your database and collection auto db = client["<databaseName>"]; auto collection = db["<collectionName>"]; // Create an index model with your index name and definition auto siv = collection.search_indexes(); auto name = "<indexName>"; auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", true)))); auto model = search_index_model(name, definition.view()); // Create the search index siv.create_one(model); std::cout << "Index created!" << std::endl; } catch (const std::exception& e) { std::cout<< "Exception: " << e.what() << std::endl; } return 0; }
您还可以一次创建多个 Atlas Search 索引。对于要创建的每个搜索索引,将搜索索引规范传递给search_index_model()
方法。然后,将每个搜索索引添加到一个向量中,并将向量传递给create_many()
方法以创建搜索索引:
using bsoncxx::builder::basic::kvp; using bsoncxx::builder::basic::make_document; using namespace mongocxx; int main() { try { // Connect to your Atlas deployment mongocxx::instance instance{}; mongocxx::uri uri("<connectionString>"); mongocxx::client client(uri); // Access your database and collection auto db = client["<databaseName>"]; auto collection = db["<collectionName>"]; // Create index models and add them to a vector auto siv = collection.search_indexes(); std::vector<search_index_model> models; auto name1 = "<firstIndexName>"; auto definition1 = make_document(/* Add search index definition fields here */); auto model1 = search_index_model(name1, definition1.view()); models.push_back(model1); auto name2 = "<secondIndexName>"; auto definition2 = make_document(/* Add search index definition fields here */); auto model2 = search_index_model(name2, definition2.view()); models.push_back(model2); // Create the search indexes siv.create_many(models); std::cout << "Indexes created!" << std::endl; } catch (const std::exception& e) { std::cout<< "Exception: " << e.what() << std::endl; } return 0; }
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要创建索引的数据库和集合。
索引名称。如果省略索引名称,Atlas Search 会将索引命名为
default
。
搜索索引定义。要了解更多信息,请参阅查看 Atlas Search 索引语法。
创建一个索引
要使用.NET/C# 驱动程序创建 Atlas Search 索引,请执行以下操作:
构造一个定义索引的
BsonDocument
。将
BsonDocument
传递给CreateOne()
或CreateOneAsync()
方法。
以下示例应用程序定义了搜索索引,以对集合中的字段进行动态索引,然后运行 CreateOne()
方法来创建索引。要了解详情,请参阅查看 Atlas Search 索引语法。
将Program.cs
文件的内容替换为定义索引的BsonDocument
。
替换以下示例中的占位符值:
值 | 说明 |
---|---|
<connection-string> | Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。 |
<databaseName> | 要为其创建索引的数据库。 |
<collectionName> | 要为其创建索引的集合。 |
您还可以定义索引的名称。如果省略索引名称,Atlas Search 会将索引命名为default
。
using MongoDB.Bson; using MongoDB.Driver; // connect to your Atlas deployment var uri = "<connection-string>"; var client = new MongoClient(uri); var db = client.GetDatabase("<databaseName>"); var collection = db.GetCollection<BsonDocument>("<collectionName>"); // define your Atlas Search index var index = new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true } } } }; var result = collection.SearchIndexes.CreateOne(index); Console.WriteLine(result);
创建多个索引
要一次创建多个 Atlas Search 索引,请执行以下操作:
构造一个包含搜索索引定义的
IEnumerable<CreateSearchIndexModel>
实例。将集合传递给
CreateMany()
或CreateManyAsync()
方法。
下面的示例展示了如何使用 CreateMany()
方法创建多个索引:
将Program.cs
文件的内容替换为定义索引的BsonDocument
。
替换以下示例中的占位符值:
值 | 说明 |
---|---|
<connection-string> | Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。 |
<databaseName> | 要为其创建索引的数据库。 |
<collectionName> | 要为其创建索引的集合。 |
<first-index-name> | 第一个索引的名称。 |
<last-index-name> | 最后一个索引的名称。 |
using MongoDB.Bson; using MongoDB.Driver; // connect to your Atlas deployment var uri = "<connection-string>"; var client = new MongoClient(uri); var db = client.GetDatabase("<databaseName>"); var collection = db.GetCollection<BsonDocument>("<collectionName>"); // define your Atlas Search indexes var indexes = new List<CreateSearchIndexModel> { new CreateSearchIndexModel( "<first-index-name>", new BsonDocument { // search index definition fields } ), ... new CreateSearchIndexModel( "<last-index-name>", new BsonDocument { // search index definition fields } ) }; var result = collection.SearchIndexes.CreateMany(indexes);
要使用Java 驱动程序创建 Atlas Search 索引,请构造定义搜索索引的文档,然后将该文档传递给createSearchIndex()
或createSearchIndexes()
方法。要了解更多信息,请参阅驱动程序文档。
注意
Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行前返回。要确定索引的当前状态,请调用 listSearchIndexes()
方法。
将以下代码示例复制到该文件中。
以下示例应用程序定义一个搜索索引以动态索引集合中的字段,然后运行createSearchIndex()
方法来创建索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; public class CreateIndex { public static void main(String[] args) { // connect to your Atlas cluster String uri = "<connection-string>"; try (MongoClient mongoClient = MongoClients.create(uri)) { // set namespace MongoDatabase database = mongoClient.getDatabase("<databaseName>"); MongoCollection<Document> collection = database.getCollection("<collectionName>"); Document index = new Document("mappings", new Document("dynamic", true)); collection.createSearchIndex("<index-name>", index); } } }
您可以使用以下示例应用程序一次创建多个 Atlas Search 索引。为此,为要创建的每个搜索索引构造一个文档,然后将文档作为数组传递给createSearchIndexes()
方法:
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.SearchIndexModel; import org.bson.Document; import java.util.Arrays; public class CreateIndex { public static void main(String[] args) { // connect to your Atlas cluster String uri = "<connection-string>"; try (MongoClient mongoClient = MongoClients.create(uri)) { // set namespace MongoDatabase database = mongoClient.getDatabase("<databaseName>"); MongoCollection<Document> collection = database.getCollection("<collectionName>"); SearchIndexModel indexOne = new SearchIndexModel("<first-index-name>", new Document( // search index definition fields )); SearchIndexModel indexTwo = new SearchIndexModel("<second-index-name>", new Document( // search index definition fields )); collection.createSearchIndexes(Arrays.asList(indexOne, indexTwo)); } } }
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要创建索引的数据库和集合。
索引的名称。如果省略索引名称,Atlas Search 会将索引命名为
default
。
用于定义搜索索引的字段。要了解更多信息,请参阅查看 Atlas Search 索引语法。
创建一个索引
要通过节点驱动程序创建 Atlas Search 索引,请执行以下操作:
定义应用程序中的搜索索引。
运行
createSearchIndex
或createSearchIndexes
辅助方法。
以下名为 create-index.js
的样本应用程序定义搜索索引,以对集合中的字段进行动态索引,然后运行 createSearchIndex
命令来创建索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。
定义搜索索引。
替换以下示例中的占位符值:
值 | 说明 |
---|---|
<connection-string> | Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。 |
<databaseName> | 要为其创建索引的数据库。 |
<collectionName> | 要为其创建索引的集合。 |
<index-name> | 索引的名称。 如果省略索引名称,Atlas Search 会将索引命名为 default 。 |
import { MongoClient } from "mongodb"; // connect to your Atlas deployment const uri = "<connection-string>"; const client = new MongoClient(uri); async function run() { try { const database = client.db("<databaseName>"); const collection = database.collection("<collectionName>"); // define your Atlas Search index const index = { name: "<index-name>", definition: { /* search index definition fields */ "mappings": { "dynamic": true } } } // run the helper method const result = await collection.createSearchIndex(index); console.log(result); } finally { await client.close(); } } run().catch(console.dir);
创建多个索引
要一次创建多个 Atlas Search 索引,请执行以下操作:
在您的应用程序中,定义一个搜索索引数组。
将数组传递给
createSearchIndexes
命令。
以下示例演示如何使用createSearchIndexes
命令创建多个索引:
定义搜索索引。
替换以下示例中的占位符值:
值 | 说明 |
---|---|
<connection-string> | Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。 |
<databaseName> | 要为其创建索引的数据库。 |
<collectionName> | 要为其创建索引的集合。 |
<first-index-name> | 第一个索引的名称。 |
<last-index-name> | 最后一个索引的名称。 |
import { MongoClient } from "mongodb"; // connect to your Atlas deployment const uri = "<connection-string>"; const client = new MongoClient(uri); async function run() { try { const database = client.db("<databaseName>"); const collection = database.collection("<collectionName>"); // define an array of Atlas Search indexes const indexes = [ { name: "<first-index-name>", definition: { /* search index definition fields */ } }, ... { name: "<last-index-name>", definition: { /* search index definition fields */ } } ] // run the helper method const result = await collection.createSearchIndexes(indexes); console.log(result); } finally { await client.close(); } } run().catch(console.dir);
要使用Python 驱动程序创建 Atlas Search 索引,请在应用程序中定义搜索索引并调用create_search_index()
方法。
注意
Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行之前返回。要确定搜索索引的当前状态,请对collection调用list_search_indexes()
方法。
例子
将以下代码示例复制到该文件中。
以下示例应用程序定义了一个搜索索引,用于动态索引集合中的字段。然后,应用程序对集合调用create_search_index()
方法以创建搜索索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。
from pymongo.mongo_client import MongoClient from pymongo.operations import SearchIndexModel def create_index(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["<databaseName>"] collection = database["<collectionName>"] # Create your index model, then create the search index search_index_model = SearchIndexModel( definition={ "mappings": { "dynamic": True }, }, name="<indexName>", ) result = collection.create_search_index(model=search_index_model) print(result)
您还可以一次创建多个 Atlas Search 索引。在您的应用程序中,定义一个搜索索引数组。然后,将该数组作为参数传递给create_search_indexes()
方法:
from pymongo.mongo_client import MongoClient from pymongo.operations import SearchIndexModel def create_indexes(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["<databaseName>"] collection = database["<collectionName>"] # Create your index models and add them to an array first_model = SearchIndexModel( definition={ # Add search index definition fields here }, name="<firstIndexName>", ) second_model = SearchIndexModel( definition={ # Add search index definition fields here }, name="<secondIndexName>", ) idx_models = [first_model, second_model] # Create the search indexes result = collection.create_search_indexes(models=idx_models) print(result)
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要创建索引的数据库和集合。
索引名称。如果省略索引名称,Atlas Search 会将索引命名为
default
。
搜索索引定义。要了解更多信息,请参阅查看 Atlas Search 索引语法。
创建Atlas Search索引时, Atlas Search页面会显示有关Atlas Search索引的信息。 Status列显示集群主节点 (primary node in the replica set)节点上索引的当前状态。要学习;了解更多信息,请参阅查看索引状态。
警告
如果您对已具有 Atlas Search 索引的集合进行分片,当该集合开始出现在分片上时,您可能会遇到短暂的查询停机时间。此外,如果您为包含 Atlas Search 索引的已分片集合添加分片,针对该集合的搜索查询将失败,直到添加的分片完成初始同步过程为止。要了解更多信息,请参阅初始同步进程。