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+集群上创建不超过 2 个、500 个搜索索引。

  • 要从Compass创建Atlas M10+Search索引,您必须有一个运行MongoDB7.0 或更高版本的 Atlas 集群。

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

  1. 从数据中抽取样本,用样本数据创建新的数据集。

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

    注意

    示例数据的索引定义必须与要在完整集合中创建的索引定义相同。

  3. 根据数据的总大小来扩展示例数据索引的大小。

    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" }
])
[
{
_id: ObjectId('573a13bbf29313caabd53f9c'),
plot: "Three years ago, in real-life, Hama Ali, a charismatic actor from Iraq famous locally for his performance as Iraq's version of Superman, met Ayca on a film-set. He and Ayca, a fiery actress...",
genres: [ 'Drama', 'Romance', 'War' ],
runtime: 93,
cast: [
'Ayèa Damgaci',
'Hama Ali Kahn',
'Cengiz Bozkurt',
'Nesrin Cavadzade'
],
num_mflix_comments: 1,
poster: 'https://m.media-amazon.com/images/M/MV5BMjA1OTI1MjI4OV5BMl5BanBnXkFtZTgwODk1MTA2MDE@._V1_SY1000_SX677_AL_.jpg',
title: 'Gitmek: My Marlon and Brando',
fullplot: "Three years ago, in real-life, Hama Ali, a charismatic actor from Iraq famous locally for his performance as Iraq's version of Superman, met Ayca on a film-set. He and Ayca, a fiery actress from Turkey, had a passionate love affair before returning to their respective homes. From his Kurdish village, Hama Ali sends Ayca video love letters which he has filmed on his handycam. She watches them from her sofa in Istanbul, with her cat for company. The video love letters capture the hellish violence engulfing Iraq, the goats and uncles populating his rural area, and also his tender affection towards her. Feeling suffocated by her own city and angered by the indifference towards the war that surrounds her, Ayca decides to make the journey eastwards to Iraq to be reunited with her lover. GITMEK, a dramatic feature film, is based on the true story of Ayca's departure from Istanbul and her extraordinary journey to the Iraqi border. At a time when many people were fleeing from East to West in search of safety, Ayca makes the opposite journey, in search of love. She is helped by immigrant artists who live in the slums of Istanbul and the mothers of long distance truck drivers who she meets at various border towns. The journey takes her through breathtaking landscapes, strange encounters and terrifying times.",
languages: [ 'English', 'Kurdish', 'Turkish' ],
released: ISODate('2008-11-14T00:00:00.000Z'),
directors: [ 'Huseyin Karabey' ],
writers: [ 'Ayèa Damgaci', 'Huseyin Karabey' ],
awards: { wins: 12, nominations: 4, text: '12 wins & 4 nominations.' },
lastupdated: '2015-07-04 00:20:59.083000000',
year: 2008,
imdb: { rating: 6.6, votes: 628, id: 920460 },
countries: [ 'Turkey' ],
type: 'movie',
tomatoes: {
viewer: { rating: 3.7, numReviews: 181, meter: 79 },
lastUpdated: ISODate('2015-07-16T18:10:38.000Z')
}
},
{
_id: ObjectId('573a139af29313caabcefb6a'),
plot: '48 hours of intersecting lives and crimes in Los Angeles.',
genres: [ 'Comedy', 'Crime', 'Drama' ],
runtime: 104,
rated: 'R',
cast: [
'Danny Aiello',
'Greg Cruttwell',
'Jeff Daniels',
'Teri Hatcher'
],
num_mflix_comments: 1,
poster: 'https://m.media-amazon.com/images/M/MV5BZDI0ZmFmYTgtMTQ5OS00MTVmLTgwNWYtNzIyY2Y5NjYxNzgyXkEyXkFqcGdeQXVyNzc5MjA3OA@@._V1_SY1000_SX677_AL_.jpg',
title: '2 Days in the Valley',
fullplot: 'John Herzfeld deftly welds together a multitude of subplots-- a loser hitman and a cool assassin involved in an insurance scam; a washed-up director, turned suicidal, if only he had someone to care for his beloved dog; a snooty art dealer, wracked by kidney stones, cared for by his devoted assistant; a grungy deranged vice cop, now partnered with a fresh-faced rookie; and two beautiful and jealous women entangled in their deadly scheme--into a spoof of the crime thriller genre.',
languages: [ 'English', 'Vietnamese' ],
released: ISODate('1996-09-27T00:00:00.000Z'),
directors: [ 'John Herzfeld' ],
writers: [ 'John Herzfeld' ],
awards: { wins: 0, nominations: 1, text: '1 nomination.' },
lastupdated: '2015-09-11 00:42:22.520000000',
year: 1996,
imdb: { rating: 6.5, votes: 15019, id: 115438 },
countries: [ 'USA' ],
type: 'movie',
tomatoes: {
viewer: { rating: 3, numReviews: 14630, meter: 55 },
dvd: ISODate('2001-08-07T00:00:00.000Z'),
critic: { rating: 6, numReviews: 53, meter: 60 },
lastUpdated: ISODate('2015-08-19T18:25:36.000Z'),
consensus: 'A labyrinthine thriller with a host of memorable characters, 2 Days in the Valley is an uneven but intriguing thriller/black comedy.',
rotten: 21,
production: 'HBO Video',
fresh: 32
}
},
{
_id: ObjectId('573a13bdf29313caabd5943e'),
fullplot: "When Emily Parris exposes a secret society of teenage girls who have slipped out of the world of social media and into another world they've discovered in the woods at night. When she accuses the girls of committing sexually deviant activities, Emily sends the small American town into a atmosphere of hysteria and the national media spotlight. The mystery deepens when each of the accused girls upholds a vow of silence.",
imdb: { rating: 6.2, votes: 861, id: 1015471 },
year: 2014,
plot: "When a teenage girl says she's the victim of a secret network called The Sisterhood of Night, a quiet suburban town becomes the backdrop for a modern-day Salem witch trial.",
genres: [ 'Drama', 'Mystery', 'Thriller' ],
rated: 'PG-13',
metacritic: 60,
title: 'The Sisterhood of Night',
lastupdated: '2015-09-10 17:22:16.113000000',
languages: [ 'English' ],
writers: [ 'Marilyn Fu (screenplay)', 'Steven Millhauser (short story)' ],
type: 'movie',
tomatoes: {
website: 'http://www.thesisterhoodofnight-movie.com/',
viewer: { rating: 3.6, numReviews: 382, meter: 65 },
dvd: ISODate('2015-06-09T00:00:00.000Z'),
critic: { rating: 6.6, numReviews: 19, meter: 79 },
boxOffice: '$5.3k',
rotten: 4,
production: 'Cine Mosaic',
lastUpdated: ISODate('2015-09-13T17:24:37.000Z'),
fresh: 15
},
poster: 'https://m.media-amazon.com/images/M/MV5BODg3MjE0MDM4N15BMl5BanBnXkFtZTgwOTY0MjE5NDE@._V1_SY1000_SX677_AL_.jpg',
num_mflix_comments: 1,
released: ISODate('2014-10-18T00:00:00.000Z'),
awards: { wins: 2, nominations: 3, text: '2 wins & 3 nominations.' },
countries: [ 'USA' ],
cast: [
'Georgie Henley',
'Kara Hayward',
'Willa Cuthrell',
'Olivia DeJonge'
],
directors: [ 'Caryn Waechter' ],
runtime: 104
},
{
_id: ObjectId('573a13c4f29313caabd6d7bf'),
plot: 'A film producer struggles with suicidal despair.',
genres: [ 'Drama' ],
runtime: 110,
metacritic: 76,
cast: [
'Louis-Do de Lencquesaing',
'Chiara Caselli',
'Alice de Lencquesaing',
'Alice Gautier'
],
num_mflix_comments: 0,
poster: 'https://m.media-amazon.com/images/M/MV5BMTUxODczODA2NV5BMl5BanBnXkFtZTcwNzExMjQ1Mw@@._V1_SY1000_SX677_AL_.jpg',
title: 'Father of My Children',
fullplot: "In the first half, Gregoire, a movie producer of great charm, owner of Moon Films, plays with his younger daughters, talks with his wife and his eldest daughter, and keeps his studio going while one project hemorrhages money and creditors circle. In the second half, Sylvia, his Italian wife, tries to hold the family together as she looks fully into Moon Films' troubles. She meets with a banker, a temperamental Swede, Russian TV magnates, a film lab exec, and Moon's lawyer. Clèmence, the oldest daughter, goes on her own search. Debt can crush; how does a family pick up the pieces?",
languages: [ 'French' ],
released: ISODate('2009-12-16T00:00:00.000Z'),
directors: [ 'Mia Hansen-Lève' ],
writers: [ 'Mia Hansen-Lève (screenplay)' ],
awards: { wins: 2, nominations: 3, text: '2 wins & 3 nominations.' },
lastupdated: '2015-09-02 00:01:22.897000000',
year: 2009,
imdb: { rating: 6.7, votes: 1820, id: 1356928 },
countries: [ 'France', 'Germany', 'Belgium' ],
type: 'movie',
tomatoes: {
website: 'http://www.filmsdulosange.fr/fr/fr_peredemesenfants.html',
viewer: { rating: 3.3, numReviews: 1232, meter: 60 },
dvd: ISODate('2010-06-21T00:00:00.000Z'),
critic: { rating: 7.4, numReviews: 55, meter: 91 },
lastUpdated: ISODate('2015-09-11T18:38:12.000Z'),
consensus: 'A tragedy gracefully lifted by tender empathy and moments of joy, Father of My Children is a quiet triumph for writer-director Mia Hansen-Love.',
rotten: 5,
production: 'IFC Films',
fresh: 50
}
},
{
_id: ObjectId('573a13a5f29313caabd15cc1'),
plot: 'After a 13-year imprisonment in Hong Kong, a kickboxer challenges the current champion in order to restore his honor.',
genres: [ 'Drama', 'Romance', 'Sport' ],
runtime: 105,
cast: [
'Andy Lau',
'Takako Tokiwa',
'Inthira Charoenpura',
'Apichaya Thanatthanapong'
],
title: 'Ah Fu',
lastupdated: '2015-09-14 12:56:13.823000000',
languages: [ 'Cantonese' ],
released: ISODate('2000-11-21T00:00:00.000Z'),
directors: [ 'Daniel Lee' ],
writers: [ 'Chi-Sing Cheung', 'Daniel Lee' ],
awards: { wins: 1, nominations: 3, text: '1 win & 3 nominations.' },
year: 2000,
imdb: { rating: 6.6, votes: 350, id: 277558 },
countries: [ 'Hong Kong' ],
type: 'movie',
tomatoes: {
viewer: { rating: 3.3, numReviews: 644, meter: 57 },
lastUpdated: ISODate('2015-04-25T18:41:33.000Z')
},
num_mflix_comments: 0
},
{
_id: ObjectId('573a13bef29313caabd5ce2b'),
plot: 'Johann Sebastian Bach llega con su familia a Leipzig para ocupar el puesto de cantor en la Escuela de Santo Tomès...',
genres: [ 'Musical' ],
runtime: 102,
metacritic: 70,
cast: [
'Christian Atanasiu',
'Fèodor Atkine',
'George-Christoph Biller',
'Christian Brembeck'
],
title: 'The Silence Before Bach',
lastupdated: '2015-05-25 00:50:52.210000000',
languages: [ 'Spanish', 'German', 'Catalan' ],
released: ISODate('2007-12-21T00:00:00.000Z'),
directors: [ 'Pere Portabella' ],
writers: [ 'Xavier Albertè', 'Pere Portabella', 'Carles Santos' ],
awards: { wins: 3, nominations: 3, text: '3 wins & 3 nominations.' },
year: 2007,
imdb: { rating: 6.8, votes: 329, id: 1079450 },
countries: [ 'Spain' ],
type: 'movie',
tomatoes: {
website: 'http://www.pereportabella.com/eng/fla/die/home_eng.html',
viewer: { rating: 3.5, numReviews: 391, meter: 64 },
critic: { rating: 6.6, numReviews: 16, meter: 81 },
lastUpdated: ISODate('2015-08-11T19:15:49.000Z'),
rotten: 3,
production: 'Film Forum',
fresh: 13
},
num_mflix_comments: 0
},
{
_id: ObjectId('573a13ccf29313caabd83260'),
plot: 'A woman subject to mental, physical, and sexual abuse on a remote island seeks a way out.',
genres: [ 'Crime', 'Drama', 'Horror' ],
runtime: 115,
cast: [ 'Yeong-hie Seo', 'Seong-won Ji', 'Min-ho Hwang', 'Min Je' ],
num_mflix_comments: 0,
poster: 'https://m.media-amazon.com/images/M/MV5BMjAyNDEwMDgzMl5BMl5BanBnXkFtZTcwNzMyMTYwNQ@@._V1_SY1000_SX677_AL_.jpg',
title: 'Bedevilled',
fullplot: "Hae-won is a beautiful single woman in her thirties who works at a bank in the Seoul city. She leads a busy life until she becomes a witness to an attempted murder case, and at the same time, things get complicated at work. When things get out of hand she is forced to take a vacation so she heads for 'Moodo', a small undeveloped island, where she had once visited to see her grandparents. And where she had befriended a girl named Bok-nam who stills writes to Hae-won asking her to visit despite the fact that Hae-won never bothered to reply. Upon arriving at the island, Hae-won is shocked to see everyone treating Bok-nam like a slave. As practically the only young woman on the island, she is a plaything for all the men and a free laborer for the women. Sick of all the inhumane treatment, Bok-nam had tried to escape the island several times in the past but had failed each time. She begs Hae-won to help her escape the place, but Hae-won remains indifferent not wanting to be involved in complicated situations. When Bok-nam realizes that her own daughter will follow her footsteps, she tries to escape the island with her daughter.",
languages: [ 'Korean' ],
released: ISODate('2010-09-02T00:00:00.000Z'),
directors: [ 'Cheol-soo Jang' ],
writers: [ 'Kwang-young Choi' ],
awards: { wins: 10, nominations: 5, text: '10 wins & 5 nominations.' },
lastupdated: '2015-09-01 01:18:02.960000000',
year: 2010,
imdb: { rating: 7.3, votes: 7983, id: 1646959 },
countries: [ 'South Korea' ],
type: 'movie'
},
{
_id: ObjectId('573a13c7f29313caabd746fe'),
plot: 'A Californian family inherits a castle in Romania. This is especially exciting to the son, who is obsessed with monsters. And he is not disappointed.',
genres: [ 'Comedy', 'Family' ],
runtime: 83,
rated: 'TV-G',
cast: [
'Victoria Justice',
'Chase Ellison',
'Anna Galvin',
'Matt Winston'
],
num_mflix_comments: 0,
poster: 'https://m.media-amazon.com/images/M/MV5BMjU1MmJlMTctY2FiMC00MmU1LWI5NmYtMDc5OWM0NjEzMmI2XkEyXkFqcGdeQXVyNDgyODgxNjE@._V1_SY1000_SX677_AL_.jpg',
title: 'The Boy Who Cried Werewolf',
fullplot: 'A Californian family inherits a castle in Romania. This is especially exciting to the son, who is obsessed with monsters. And he is not disappointed.',
languages: [ 'English' ],
released: ISODate('2010-10-22T00:00:00.000Z'),
directors: [ 'Eric Bross' ],
writers: [ 'Art Edler Brown', 'Douglas Sloan' ],
awards: { wins: 1, nominations: 2, text: '1 win & 2 nominations.' },
lastupdated: '2015-08-20 00:01:59.673000000',
year: 2010,
imdb: { rating: 6.3, votes: 1582, id: 1451423 },
countries: [ 'USA', 'Canada' ],
type: 'movie',
tomatoes: {
viewer: { rating: 3.7, numReviews: 762, meter: 66 },
lastUpdated: ISODate('2015-09-12T17:30:20.000Z')
}
},
{
_id: ObjectId('573a13b4f29313caabd3f473'),
genres: [ 'Documentary' ],
runtime: 85,
title: 'Zero Degrees of Separation',
countries: [ 'Canada' ],
lastupdated: '2015-08-09 00:30:38.977000000',
languages: [ 'Arabic', 'English', 'Hebrew' ],
released: ISODate('2005-06-22T00:00:00.000Z'),
directors: [ 'Elle Flanders' ],
writers: [ 'Elle Flanders' ],
awards: { wins: 1, nominations: 0, text: '1 win.' },
year: 2005,
imdb: { rating: 6.6, votes: 90, id: 454990 },
type: 'movie',
tomatoes: {
viewer: { rating: 3.5, numReviews: 5, meter: 100 },
fresh: 1,
critic: { numReviews: 2 },
rotten: 1,
lastUpdated: ISODate('2015-01-04T23:25:58.000Z')
},
num_mflix_comments: 0
},
{
_id: ObjectId('573a13bff29313caabd5f070'),
plot: 'This hilarious genre-bending comedy follows Gary Brewer, along with girlfriend Holly Brewer (no relation), and best friend Trevor Morehouse as Gary quests to reign supreme at the 2006 Rock, Paper, Scissors World Championships.',
genres: [ 'Comedy' ],
runtime: 85,
cast: [ 'Tim Doiron', 'April Mullen', 'Ryan Tilley', 'Peter Pasyk' ],
num_mflix_comments: 0,
poster: 'https://m.media-amazon.com/images/M/MV5BMTI5MzIwMjA2Ml5BMl5BanBnXkFtZTcwOTcyOTA4MQ@@._V1_SY1000_SX677_AL_.jpg',
title: 'Rock, Paper, Scissors: The Way of the Tosser',
fullplot: 'This hilarious genre-bending comedy follows Gary Brewer, along with girlfriend Holly Brewer (no relation), and best friend Trevor Morehouse as Gary quests to reign supreme at the 2006 Rock, Paper, Scissors World Championships.',
languages: [ 'English' ],
released: ISODate('2007-07-06T00:00:00.000Z'),
directors: [ 'Tim Doiron', 'April Mullen' ],
writers: [ 'Tim Doiron (creator)', 'April Mullen (creator)', 'Tim Doiron' ],
awards: { wins: 2, nominations: 0, text: '2 wins.' },
lastupdated: '2015-08-12 00:01:33.813000000',
year: 2007,
imdb: { rating: 6.2, votes: 316, id: 1121964 },
countries: [ 'Canada' ],
type: 'movie'
}
]

接下来,对于使用 $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 CLI 文档中的 atlas clusters search indexes create 部分。

提示

请参阅:相关链接

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

atlas deployments search indexes create [indexName] [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档的 atlas deployments search indexes create 部分。

提示

请参阅:相关链接

以下示例说明了如何使用 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(集群)。

    会显示集群页面。

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 部分中,展开数据库,然后选择要创建索引的集合名称。

  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 设置。

    可选。

    Index Partitions

    字段对象超过 2.1 十亿时要使用的分区数。

    对应于 numPartitions JSON 设置。

    重要

    numPartitions选项是作为“预览”功能的。

    可选。

  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

    numPartitions

    字段对象超过 2.1 十亿时要使用的分区数。 .. include:: /includes/fact-numpartitions-preview.rst

    可选。

    要详细了解这些索引定义设置,请参阅查看 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 Searchh 索引。在以下示例中,定义要在 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 Searchh 索引。对于要创建的每个搜索索引,将搜索索引规范传递给 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>

要为其创建索引的集合。

<IndexName>

索引名称。如果省略索引名称,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, "<indexName>");
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 索引管理方法异步运行。驱动程序方法可以在确认成功运行前返回。要确定搜索索引的当前状态,请对集合调用 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 Searchh 索引。在您的应用程序中,定义搜索索引数组。然后,将该数组作为参数传递给 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(状态)列显示集群主节点上索引的当前状态。要了解更多信息,请参阅查看索引状态。

警告

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

后退

创建和管理索引