Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

创建 Atlas Search 索引

在此页面上

  • 先决条件
  • 必需的访问权限
  • 免费和共享集群限制
  • 估计索引的大小
  • 创建 Atlas Search 索引

Atlas Search 索引是一种数据结构,它以易于搜索的格式对数据进行分类。它是术语与包含这些术语的文档之间的映射。 Atlas Search 索引可以使用某些标识符更快地检索文档。您必须配置 Atlas Search 索引,才能使用 Atlas Search 查询 Atlas 集群中的数据。

您可在单个字段或多个字段上创建 Atlas Search 索引。我们建议您对经常用于排序或筛选数据的字段建立索引,以便在查询时快速检索包含相关数据的文档。

您可以通过 Atlas UI、APIAtlas CLITerraform 为 Atlas 集群上除 时间序列集合之外的所有集合创建 Atlas Search 索引。

重要

如果您使用 $out 聚合阶段修改具有 Atlas Search 索引的集合,则必须删除并重新创建搜索索引。如果可能,请考虑使用 $merge,而不是 $out

要创建 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或更高版本。

您可以通过在集合的子集上创建索引来估计索引的大小:

  1. 抽取数据样本并使用样本数据创建新集合。

  2. 在包含样本数据的集合上创建搜索索引。

    注意

    样本数据的索引定义必须与要在完整集合上创建的索引定义相同。

  3. 根据数据的总大小扩展样本数据索引的大小。

    estimated-index-size = ( subset-data-index-size / subset-data-size ) x total-collection-data-size

例子

此示例使用sample_mflix.movies命名空间。我们首先运行$samplemovies集合中随机选择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 用户界面、MongoDB Compass 来创建 Atlas Search 索引,也可以使用mongosh 、Atlas CLI、 API 或受支持的 MongoDB 驱动程序以您的首选语言以编程方式创建 Atlas Search 索引。

注意

Atlas Search 索引必须应用于整个集合,而不仅仅是集合的一部分。


➤ 使用选择语言下拉菜单设置本节中示例的语言。


要创建 Atlas Search 索引,请执行以下操作:

1

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"
}
}
]
}
}'

要了解有关此端点的语法和参数的更多信息,请参阅创建端点。

2

注意

如果该集合不存在,Atlas 则不会创建索引,但仍会返回 200 状态。

您还可以将 Atlas Search 与通过 Atlas CLI 创建的本地 Atlas 部署结合使用。要了解详情,请参阅创建本地 Atlas 部署

要使用 Atlas CLI 为集群创建搜索索引,请运行以下命令:

atlas clusters search indexes create [indexName] [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas clusters searchindexes create 的 Atlas CLI 文档。

提示

请参阅:相关链接

要使用 Atlas CLI 为指定部署创建搜索索引,请运行以下命令:

atlas deployments search indexes create [indexName] [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas部署 searchindexes create 的 Atlas CLI 文档。

提示

请参阅:相关链接

以下示例向您展示如何使用atlas clustersatlas deployments命令通过配置文件以非交互模式创建 Atlas Search 索引。

1
{
"collectionName": "movies",
"database": "sample_mflix",
"definition": {
"mappings": {
"dynamic": true
},
},
"name": "searchIndex"
}
2
  1. 运行以下命令之一。

    云部署:

    atlas clusters search indexes create --file indexDef.json

    本地部署:

    atlas deployments search indexes create --file indexDef.json
  2. 指定部署并按 Enter

对于$search查询,您可以创建默认search类型的索引。

要从 Atlas 用户界面创建 Atlas Search 索引,请执行以下操作:

1
  1. 如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。

    此时会显示“集群”页面。

2

您可以从侧边栏、 Data Explorer或集群详细信息页面转到 Atlas Search 页面。

  1. 在侧边栏中,单击Services标题下的Atlas Search

  2. Select data source下拉列表中,选择您的集群并单击Go to Atlas Search

    显示Atlas Search页面。

  1. 单击集群的对应 Browse Collections 按钮。

  2. 展开数据库并选择集合。

  3. 单击集合的Search Indexes标签页。

    显示Atlas Search页面。

  1. 单击集群名称。

  2. 单击 Atlas Search 标签页。

    显示Atlas Search页面。

3
4
创建 Atlas Search 索引模式窗口的屏幕截图
点击放大
  • 要获得引导式体验,请选择 Atlas Search Visual Editor

  • 要编辑原始索引定义,请选择 Atlas SearchJSON Editor

5
  1. Index Name字段中,指定索引的名称。

    索引名称在其命名空间内必须是唯一的。索引名称默认为default 。您可以接受默认名称,也可以指定其他名称。

    如果将索引命名为default ,则无需在$search管道阶段指定index参数。如果您为索引指定自定义名称,则必须在index参数中指定该名称。

  2. Database and Collection部分中,展开数据库,然后选择集合名称。

    提示

    如果您从Data Explorer导航到此页面,则可以跳过此步骤,因为 Atlas 会预先选择您在Data Explorer中选择的数据库和集合。

  3. 如果使用了 Visual Editor,则请单击 Next

6

您可以使用默认索引定义,也可以指定自定义索引定义:

  • 默认索引定义是文档中字段的动态映射,适用于任何集合。

  • 自定义索引定义是静态映射。您可以指定要索引的字段、分析器和数据类型。

字段名称
说明
必要性
Index Analyzer

指定用于索引集合数据的分析器。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

对应于 analyzer JSON 设置。

Optional
Query Analyzer

指定在搜索查询文本之前要应用到文本的分析器。如果省略此字段,则索引默认按以下顺序继承分析器:

  1. 该字段的 analyzer 选项(如果已指定)。

  2. 索引searchAnalyzer 选项(如果指定)。

  3. 索引analyzer 选项(如果指定)。

  4. lucene.standard 分析器。

对应于 searchAnalyzer JSON 设置。

Optional
Dynamic Mapping

指定字段的动态或静态映射。要禁用动态映射,请将 "dynamic": 设置为 Off。默认启用动态映射。要禁用动态映射,您必须指定要索引的字段。要了解有关动态和静态映射的更多信息,请参阅查看 Atlas Search 索引语法

对应于 mappings.dynamic JSON 设置。

必需
字段名称
说明
必要性
analyzer

指定用于索引集合数据的分析器。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

Optional
searchAnalyzer

指定在搜索查询文本之前要应用到文本的分析器。如果省略此字段,则索引默认按以下顺序继承分析器:

  1. 该字段的 analyzer 选项(如果已指定)。

  2. 索引searchAnalyzer 选项(如果指定)。

  3. 索引analyzer 选项(如果指定)。

  4. lucene.standard 分析器。

Optional
mappings.dynamic

指定字段的动态或静态映射。要禁用动态映射,请将 "dynamic": 设置为 false。默认启用动态映射。要禁用动态映射,您必须指定要索引的字段。要了解有关动态和静态映射的更多信息,请参阅查看 Atlas Search 索引语法

必需

要了解有关这些搜索索引定义设置的更多信息,请参阅查看 Atlas Search 语法。

如果您对默认配置感到满意,请跳过。如果您希望优化 Atlas Search 索引,请继续执行下一步。

7

如果您使用的是 Visual Editor

  1. 单击 Refine Your Index 更改以下任何设置。

    字段名称
    说明
    必要性
    Field Mappings

    如果 Index Configurations 部分中的 Dynamic Mapping 处于禁用状态,则为必填项。

    仅建议高级用户定义自己的字段映射。

    指定要编制索引的字段。要添加字段,必须执行以下操作:

    1. 点击 Add Field 打开 Add Field Mapping 窗口。

    2. 指定关于字段的以下信息:

      • Field name -要索引的字段名称。

      • Data Type Configuration — 字段数据类型。要了解有关支持的数据类型及其选项的更多信息,请参阅数据类型。

      • Enable Dynamic Mapping - 用于文档嵌入式文档类型字段的静态或动态映射。如果禁用动态映射,则不会自动为字段中的数据编制索引。

    3. 单击 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和您指定的字段。您可以通过执行以下操作来指定字段:

      1. Field Name 列的下拉列表中选择要存储在 Atlas Search 中的字段。

      2. 单击 Add 将字段添加到要存储的字段列表中。

      3. 单击 Add Field 并对要添加到列表中的每个字段重复步骤 ab

      4. (可选)单击以下选项之一:

        • Edit 以选择其他字段。

        • Delete 从要存储的字段列表中删除字段。

    • All Except Specified - 如果选中,Atlas Search 会从 Atlas Search 的存储中排除特定字段。

      1. Field Name 列的下拉列表中选择要排除的字段。

      2. 单击 Add 将字段添加到要排除的字段列表中。

      3. 单击 Add Field,然后对列表中要排除的每个字段重复步骤 ab

      4. (可选)单击以下选项之一:

        • Edit 以选择其他字段。

        • Delete 从要排除的字段列表中删除该字段。

    要了解有关存储字段的更多信息,请参阅在 Atlas Search 索引中定义存储的源字段

    对应于 storedSource JSON 设置。

    Optional
    Synonyms Mappings

    指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射

    要添加同义词映射,您必须为每个同义词指定以下设置:

    • Synonym mapping name - 此标签用于标识查询时要引用的同义词映射。必须指定一个唯一值。不能指定空字符串值。

    • Synonym source collection — 此标签用于标识与 Atlas Search 索引位于同一数据库中的 MongoDB 集合。此集合中的文档使用同义词源集合文档中描述的格式。您还可以添加空集合或加载示例集合。

    • Analyzer — 标识用于此同义词映射的分析器的标签。

      您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

      您可以指定任何 Atlas Search 分析器,但以下分析器除外:

    对应于 synonyms JSON 设置。

    可选。
  2. 单击 Save Changes(连接)。

如果您使用的是 Atlas Search JSON Editor ,请执行以下操作:

  1. 将以下任意设置添加到索引中:

    字段名称
    说明
    必要性
    mappings.fields

    如果mappings.dynamicfalse ,则为必填项。

    仅建议高级用户定义自己的字段映射。

    指定要编制索引的字段。要了解更多信息,请参阅定义字段映射。

    您可以按任意顺序定义 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 索引中定义存储的源字段。

    Optional
    synonyms

    指定要在索引中使用的同义词映射。要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射

    您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

    Optional

    要了解有关这些搜索索引定义设置的更多信息,请参阅查看 Atlas Search 语法。

  2. 单击 Next(连接)。

8

注意

如果使用 Visual Editor,且索引定义包含静态映射,则可以将索引定义保存为草稿。 您无法将默认索引定义保存为草稿。您只能将自定义索引定义保存为草稿。

  1. 单击 Cancel(连接)。

  2. 点击 Save DraftDelete Draft

    重要

    在有待处理的索引草稿时,您无法创建新索引。

    要了解有关使用索引草稿创建索引的更多信息,请参阅恢复或删除 Atlas Search 索引草稿。

9

Atlas 会显示一个模态窗口,让您知道您的索引正在构建中。

10
11

新创建的索引会出现在 Atlas Search 标签页上。在构建索引期间,Status 字段显示为 Build in Progress。索引构建完成后,Status 字段将显示为Active

注意

较大的集合需要较长的索引时间。索引构建完成后,您将收到电子邮件通知。

本视频教程演示如何创建不同复杂程度的 Atlas Search 索引。

时长:15 分钟

要通过mongosh创建 Atlas Search 索引:

1

要了解更多信息,请参阅通过mongosh连接。

2

使用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
1

打开Compass并连接到 Atlas 集群。有关连接的详细说明,请参阅通过 Compass 连接。

2

Database屏幕上,单击数据库的名称,然后单击集合的名称。

3
  1. 单击 Indexes 标签页,然后选择 Search Indexes

  2. 单击Create Index打开索引创建对话框。

  3. 指定索引的名称,然后指定搜索索引定义。

    索引名称

    default

    索引定义
    {
    mappings: { dynamic: true }
    }
  4. 单击 Create Search Index(连接)。

要使用C 驱动程序创建 Atlas Search 索引,请在应用程序中定义搜索索引并调用mongoc_collection_command_simple()方法。

注意

Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行之前返回。要确定搜索索引的当前状态,请使用$listSearchIndexes管道阶段运行聚合操作。

1
2

以下示例应用程序指定createSearchIndexes命令来定义搜索索引,该索引可为集合中的字段动态编制索引。然后,应用程序将命令和搜索索引信息转换为BSON ,并将此信息传递给mongoc_collection_command_simple()方法以创建搜索索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。

#include <mongoc/mongoc.h>
#include <stdlib.h>
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()方法来创建搜索索引:

#include <mongoc/mongoc.h>
#include <stdlib.h>
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;
}
3
  • Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接

  • 要创建索引的数据库和集合。

  • 索引名称。如果省略索引名称,Atlas Search 会将索引命名为 default

4
gcc -o create-index create-index.c $(pkg-config --libs --cflags libmongoc-1.0)
./create-index

要使用C++ 驱动程序创建 Atlas Search 索引,请在应用程序中定义搜索索引并调用create_one()方法。

注意

Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行之前返回。要确定搜索索引的当前状态,请对搜索索引视图实例调用list()方法。

1
2

以下示例应用程序将搜索索引名称和定义传递给search_index_model()方法,以便对集合中的字段动态编制索引。然后,应用程序将搜索索引规范传递给create_one()方法以创建搜索索引。要了解更多信息,请参阅查看 Atlas Search 索引语法。

#include <bsoncxx/builder/basic/document.hpp>
#include <bsoncxx/builder/basic/kvp.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/search_index_view.hpp>
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()方法以创建搜索索引:

#include <bsoncxx/builder/basic/document.hpp>
#include <bsoncxx/builder/basic/kvp.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/search_index_view.hpp>
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;
}
3
  • Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接

  • 要创建索引的数据库和集合。

  • 索引名称。如果省略索引名称,Atlas Search 会将索引命名为 default

4
g++ -o create-index create-index.cpp $(pkg-config --cflags --libs libmongocxx)
./create-index

要使用.NET/C# 驱动程序创建 Atlas Search 索引,请执行以下操作:

  1. 构造一个定义索引的BsonDocument

  2. BsonDocument传递给CreateOne()CreateOneAsync()方法。

以下示例应用程序定义了搜索索引,以对集合中的字段进行动态索引,然后运行 CreateOne() 方法来创建索引。要了解详情,请参阅查看 Atlas Search 索引语法

1
  1. 运行以下命令,创建一个名为csharp-create-index的新目录。

    mkdir csharp-create-index
  2. 运行以下命令以切换到新目录。

    cd csharp-create-index
  3. 运行以下命令以初始化项目。

    dotnet new console
2

运行以下命令:

dotnet add package MongoDB.Driver
3

替换以下示例中的占位符值:

说明
<connection-string>
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接
<databaseName>
要为其创建索引的数据库。
<collectionName>
要为其创建索引的集合。

您还可以定义索引的名称。如果省略索引名称,Atlas Search 会将索引命名为default

Program.cs
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);
4

使用以下命令运行项目:

dotnet run csharp-create-index.csproj
default

要一次创建多个 Atlas Search 索引,请执行以下操作:

  1. 构造一个包含搜索索引定义的IEnumerable<CreateSearchIndexModel>实例。

  2. 将集合传递给CreateMany()CreateManyAsync()方法。

下面的示例展示了如何使用 CreateMany() 方法创建多个索引:

1
  1. 运行以下命令,创建一个名为csharp-create-index的新目录。

    mkdir csharp-create-index-mult
  2. 运行以下命令以切换到新目录。

    cd csharp-create-index-mult
  3. 运行以下命令以初始化项目。

    dotnet new console
2

运行以下命令:

dotnet add package MongoDB.Driver
3

替换以下示例中的占位符值:

说明
<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);
4

使用以下命令运行项目:

dotnet run csharp-create-index-mult.csproj
default

提示

API 文档

要了解有关本页方法的更多信息,请参阅 .NET/C# 驱动程序的 API 文档

要使用Java 驱动程序创建 Atlas Search 索引,请构造定义搜索索引的文档,然后将该文档传递给createSearchIndex()createSearchIndexes()方法。要了解更多信息,请参阅驱动程序文档。

注意

Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行前返回。要确定索引的当前状态,请调用 listSearchIndexes() 方法。

1
2

以下示例应用程序定义一个搜索索引以动态索引集合中的字段,然后运行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));
}
}
}
3
  • Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接

  • 要创建索引的数据库和集合。

  • 索引的名称。如果省略索引名称,Atlas Search 会将索引命名为default

4
javac CreateIndex.java
java CreateIndex

要通过节点驱动程序创建 Atlas Search 索引,请执行以下操作:

  1. 定义应用程序中的搜索索引。

  2. 运行createSearchIndexcreateSearchIndexes辅助方法。

以下名为 create-index.js 的样本应用程序定义搜索索引,以对集合中的字段进行动态索引,然后运行 createSearchIndex 命令来创建索引。要了解更多信息,请参阅查看 Atlas Search 索引语法

1
2

替换以下示例中的占位符值:

说明
<connection-string>
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接
<databaseName>
要为其创建索引的数据库。
<collectionName>
要为其创建索引的集合。
<index-name>
索引的名称。 如果省略索引名称,Atlas Search 会将索引命名为default
create-index.js
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);
3

使用以下命令:

node create-index.js
<index-name>

要一次创建多个 Atlas Search 索引,请执行以下操作:

  1. 在您的应用程序中,定义一个搜索索引数组。

  2. 将数组传递给createSearchIndexes命令。

以下示例演示如何使用createSearchIndexes命令创建多个索引:

1
2

替换以下示例中的占位符值:

说明
<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);
3

使用以下命令:

node create-index-mult.js
<index-name>

要使用Python 驱动程序创建 Atlas Search 索引,请在应用程序中定义搜索索引并调用create_search_index()方法。

注意

Atlas Search 索引管理方法异步运行。驱动程序方法可以在确认成功运行之前返回。要确定搜索索引的当前状态,请对collection调用list_search_indexes()方法。

1
2

以下示例应用程序定义了一个搜索索引,用于动态索引集合中的字段。然后,应用程序对集合调用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)
3
  • Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接

  • 要创建索引的数据库和集合。

  • 索引名称。如果省略索引名称,Atlas Search 会将索引命名为 default

4
python create-index.py

创建Atlas Search索引时, Atlas Search页面会显示有关Atlas Search索引的信息。 Status列显示集群主节点 (primary node in the replica set)节点上索引的当前状态。要学习;了解更多信息,请参阅查看索引状态。

警告

如果您对已具有 Atlas Search 索引的集合进行分片,当该集合开始出现在分片上时,您可能会遇到短暂的查询停机时间。此外,如果您为包含 Atlas Search 索引的已分片集合添加分片,针对该集合的搜索查询将失败,直到添加的分片完成初始同步过程为止。要了解更多信息,请参阅初始同步进程。

后退

创建和管理索引