Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

第 1 步:创建 Atlas Search 索引

在此页面上

  • Atlas UI
  • Atlas Search API
  • Atlas CLI
  • MongoDB Compass
  • 以编程方式
  • 后续步骤

重要

无服务器实例中的不可用功能

无服务器实例目前不支持此功能。要了解更多信息,请参阅 无服务器实例限制。

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

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

您可以使用 Atlas 用户界面Atlas Search APIAtlas CLI、MongoDB Compass 或 支持的 MongoDB 驱动程序以您偏好的语言创建 Atlas Search 索引。

本教程使用样本数据集中的 sample_mflix.movies 集合。

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

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

  3. 如果尚未出现,请单击侧边栏中的 Clusters(集群)。

    会显示集群页面。

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 Visual Editor

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

5
  1. Index Name 字段中输入 default

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

  2. Database and Collection(数据库和集合)部分中找到 sample_mflix 数据库,然后选择 movies 集合。

6

您可以创建使用动态映射静态映射的 Atlas Search 索引。要了解有关动态和静态映射的更多信息,请参阅静态和动态映射

以下索引定义对 movies 集合中的支持类型字段动态创建索引。您可以使用 Atlas Search Visual Editor 或 Atlas Search JSON Editor 在 Atlas 用户界面中创建索引。

  1. 单击 Next(连接)。

  2. 查看 movies 集合的 "default" 索引定义。

  1. 单击 Next(连接)。

  2. 查看索引定义。

    索引定义应类似于以下内容:

    {
    "mappings": {
    "dynamic": true
    }
    }

    上述索引定义对 movies 集合中每个文档中的支持类型字段动态创建索引。

  3. 单击 Next(连接)。

7
8
9

此时将显示一个模态窗口,让您知道索引正在构建中。点击 Close 按钮。

10

构建索引大约需要一分钟时间。在构建时,Status 列显示 Build in Progress。构建完成后,Status 列显示 Active

1

以下索引定义动态索引 movies 集合中支持类型的字段。

1PUBLIC_KEY=MY_PUBLIC_KEY # replace replace with your public key
2PRIVATE_KEY=MY_PRIVATE_KEY # replace with your private key
3GROUP_ID=YOUR_GROUP_ID # replace with your project ID
4CLUSTER_NAME=YOUR_CLUSTER_NAME # replace with your cluster's name
5
6curl --user "$PUBLIC_KEY:$PRIVATE_KEY" --digest \
7 --header "Content-Type: application/json" \
8 --include \
9 --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/$GROUP_ID/clusters/$CLUSTER_NAME/search/indexes?pretty=true" \
10 --data '{
11 "collectionName": "movies",
12 "database": "sample_mflix",
13 "definition":{
14 "mappings": {
15 "dynamic": true
16 }
17 },
18 "name": "default"
19 }'
2

示例 cURL 请求使用这些变量。运行 cURL 命令以创建 Atlas Search 索引之前,将这些变量替换为所需的值。

名称
类型
说明
PUBLIC_KEY
字符串
用于 API 凭证的公共 API 密钥。
PRIVATE_KEY
字符串
您的 API 凭证的私有 API 密钥。
GROUP_ID
字符串
唯一的 24 位十六进制字符串,标识包含集群的项目,该集群包含您想要为其创建 Atlas Search 索引的集合。
CLUSTER_NAME
字符串

标识集群的人类可读标签,该集群包含您要为其创建 Atlas Search 索引的集合。

使用 API 获取 CLUSTER_NAME。对于每个集群,Atlas 在 name 字段中返回 CLUSTER_NAME

3
1{
2 "collectionName" : "movies",
3 "database" : "sample_mflix",
4 "indexID" : "60bfd25f59fc81594354eed3",
5 "mappings" : {
6 "dynamic" : true
7 },
8 "name" : "default",
9 "status" : "IN_PROGRESS"
10}

注意

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

1

复制以下示例索引定义,然后将 JSON 索引示例粘贴到新文件中,并保存该文件:

以下索引定义动态索引 movies 集合中支持类型的字段。

1{
2 "name": "INDEX_NAME",
3 "clusterName": "CLUSTER_NAME",
4 "collectionName": "movies",
5 "database": "sample_mflix",
6 "mappings": {
7 "dynamic": true
8 }
9}
2

将以下示例 Atlas CLI 请求粘贴到您常用的文本编辑器中并替换变量。

atlas clusters search index create \
--clusterName CLUSTER_NAME \
--file FILE_PATH \
--projectId PROJECT_ID
--profile PROFILE_NAME

示例 Atlas CLI 请求使用这些变量。运行命令以创建 Atlas Search 索引之前,将这些变量替换为所需的值。

名称
类型
说明
PROJECT_ID
字符串
唯一的 24 位十六进制字符串,标识包含集群的项目。该集群包含您想要为其创建 Atlas Search 索引的集合。
CLUSTER_NAME
字符串
标识集群的唯一 24 位十六进制字符串。该集群包含您想要为其创建 Atlas Search 索引的集合。
FILE_PATH
字符串
您在前面步骤中创建并保存的 JSON 索引文件的路径,包括 .json 文件扩展名。
PROFILE_NAME
字符串
可选。为项目设置公钥和私钥的配置文件名称。有关更多信息,请参阅保存连接设置。如果删除 --profile 标志,Atlas CLI 将使用默认配置文件。
3

运行请求。当 Atlas Search 开始创建索引时,您会收到以下响应:

{
"collectionName": "movies",
"database": "sample_mflix",
"indexID": <index-id>,
"mappings": {
"dynamic": true
},
"name": <index-name>,
"status": "IN_PROGRESS"
}

您可以在运行 MongoDB 7.0 或更高版本的 M10 及更高版本的集群上通过 MongoDB Compass 创建 Atlas Search 索引。

1

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

2

Database 屏幕上,依次单击 sample_mflix 数据库和 movies 集合。

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

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

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

    索引名称

    default

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

您可以使用 mongosh 或采用您首选语言的受支持 MongoDB 驱动程序,以编程方式创建 Atlas Search 索引。

要在任何集群层上以编程方式创建和管理AtlasAtlas Search MongoDBSearch索引,您可以使用以下任何MongoDB驱动程序:

MongoDB 驱动
版本
1.25.0 或更高版本
3.9.0 或更高版本
2.21.0 或更高版本
1.13.0 或更高
4.11.0 或更高版本
9.0 或更高
3.3.0 或更高
5.2.0 或更高
5.6.0 或更高版本
1.17.0 或更高版本
4.5 或更高版本
2.19.2 或更高版本
2.8.0 或更高版本
5.2.0 或更高

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


1

在终端窗口中打开mongosh并连接到集群。 有关连接的详细说明,请参阅通过mongosh连接。

2

mongosh 提示符下运行以下命令:

use sample_mflix
3
db.movies.createSearchIndex(
"default",
{ mappings: { dynamic: true } }
)
default
1
  1. 创建一个名为 create-index-tutorial 的新目录,并使用 dotnet new 命令初始化项目。

    mkdir create-index-tutorial
    cd create-index-tutorial
    dotnet new console
  2. 将 .NET/C# 驱动程序作为依赖项添加到项目中。

    dotnet add package MongoDB.Driver
2
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("sample_mflix");
var collection = db.GetCollection<BsonDocument>("movies");
// define your Atlas Search index
var index = new CreateSearchIndexModel(
"default", new BsonDocument
{
{ "mappings", new BsonDocument
{
{ "dynamic", true }
}
}
});
var result = collection.SearchIndexes.CreateOne(index);
Console.WriteLine(result);
3

确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接

4
dotnet run csharp-create-index.csproj
default
1
2
create-index.js
const { MongoClient } = require("mongodb");
// connect to your Atlas deployment
const uri =
"<connection-string>";
const client = new MongoClient(uri);
async function run() {
try {
// set namespace
const database = client.db("sample_mflix");
const collection = database.collection("movies");
// define your Atlas Search index
const index = {
name: "default",
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

确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接

4

要创建索引,请运行以下命令:

node create-index.js
default

现在已经创建了索引,请继续执行第 2 步:运行 Atlas Search 查询