Atlas Search 인덱스 만들기
학습자는 Atlas UI 또는 API를 통해 검색 인덱스 매핑을 정의하고 Lucene이 필드 값을 토큰화하고 저장하는 방식을 이해합니다.
Atlas Search 인덱스 만들기은(는) CoddyKit의 무료 MongoDB Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 MongoDB Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. MongoDB Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
What Is Atlas Search?
Atlas Search is a fully managed, Apache Lucene-based search engine embedded directly into MongoDB Atlas. Unlike MongoDB's native text indexes, Atlas Search provides relevance scoring, fuzzy matching, autocomplete, faceted navigation, and sophisticated analyzers—all accessible through an aggregation pipeline stage called $search. You do not need to run a separate Elasticsearch or Solr cluster; Atlas Search lives alongside your data.
How Atlas Search Works Under the Hood
Atlas Search runs a Lucene engine as a separate process alongside each MongoDB node. When documents are inserted, updated, or deleted, MongoDB streams the changes to the Lucene index asynchronously. This means Atlas Search indexes are eventually consistent with the MongoDB data—there is a small lag (typically milliseconds) between a write and its appearance in search results. For most applications this is perfectly acceptable.
Creating a Search Index via Atlas UI
In the MongoDB Atlas UI, navigate to your cluster, click the Search tab, and choose Create Search Index. You can use the Visual Editor (point-and-click field mapping) or the JSON Editor to write the index definition directly. The index applies to a specific database and collection. After clicking Create, Atlas builds the index asynchronously—a green status indicator signals when it is ready to query.
The Default Search Index Mapping
The simplest Atlas Search index uses dynamic mapping: MongoDB automatically indexes all string, number, date, and boolean fields without requiring you to enumerate them. The default index definition is just { mappings: { dynamic: true } }. This is the fastest way to get started and is suitable for exploration. For production workloads, switch to static mappings to control which fields are indexed and how they are analyzed.
// Default index definition — dynamic mapping
// All string, number, date, boolean fields are indexed automatically
{
'mappings': {
'dynamic': true
}
}
// This is what you paste into the Atlas JSON Editor when creating the indexStatic Mapping: Controlling Field Indexing
Static mapping gives you explicit control over which fields are indexed and how they are analyzed. Set dynamic: false and list each field with its type and analyzer. Fields not listed in a static mapping are not indexed. This reduces index size and improves indexing throughput for large collections by avoiding unnecessary indexing of every field.
// Static mapping: only index 'title' and 'description' as searchable strings
{
'mappings': {
'dynamic': false,
'fields': {
'title': {
'type': 'string',
'analyzer': 'lucene.standard'
},
'description': {
'type': 'string',
'analyzer': 'lucene.standard'
},
'category': {
'type': 'stringFacet' // for faceted navigation
},
'price': {
'type': 'number'
}
}
}
}Analyzers: How Text Is Tokenized
An analyzer defines how text is broken into tokens and normalized before storage in the Lucene index. lucene.standard lowercases text and splits on whitespace and punctuation. lucene.english also applies stemming (reducing 'running' to 'run') for better recall. lucene.keyword treats the entire string as a single token, useful for exact-match fields like email addresses or SKU codes. The choice of analyzer significantly impacts search quality.
{
'mappings': {
'dynamic': false,
'fields': {
// 'Standard' analyzer: good for general text
'title': { 'type': 'string', 'analyzer': 'lucene.standard' },
// 'English' analyzer: stemming for better recall
'description': { 'type': 'string', 'analyzer': 'lucene.english' },
// 'Keyword' analyzer: exact match only
'sku': { 'type': 'string', 'analyzer': 'lucene.keyword' },
// Multi-analyzer: both standard and keyword on same field
'email': {
'type': 'string',
'analyzer': 'lucene.keyword',
'multi': {
'standard': { 'type': 'string', 'analyzer': 'lucene.standard' }
}
}
}
}
}Creating a Search Index via the Atlas CLI
For infrastructure-as-code and CI/CD pipelines, you can create Atlas Search indexes using the Atlas CLI or the Atlas Administration API. This lets you version-control your search index definitions alongside your application code. The Atlas CLI command is atlas clusters search indexes create with a JSON configuration file.
# Create a search index using the Atlas CLI
# 1. Save index definition to a file:
# cat search-index.json
# { "name": "products_search", "collectionName": "products",
# "database": "shop", "mappings": { "dynamic": true } }
# 2. Create the index:
# atlas clusters search indexes create \
# --clusterName MyCluster \
# --file search-index.json \
# --projectId <YOUR_PROJECT_ID>Index Status and Monitoring
After creating a search index, it goes through the BUILDING state while Lucene processes existing documents. During this time, queries may return incomplete results or fail with an error. Once the status shows READY (green in Atlas UI), the index covers all existing documents. New documents added after index creation are indexed with a small lag. Monitor index status programmatically using the Atlas Administration API or the Atlas CLI.
// Check index status via Atlas Admin API
// GET https://cloud.mongodb.com/api/atlas/v1.0/groups/{groupId}/clusters/{clusterName}/fts/indexes/{collectionName}
// In application code, handle the case where the index is still building:
// - Catch errors with code 1261 (IndexNotFound)
// - Retry after a delay or show a 'search unavailable' messageNested and Array Field Indexing
Atlas Search can index nested document fields and array elements. Use dot notation in the field path to reference nested fields, just like regular MongoDB queries. For arrays of subdocuments, each element is indexed separately. This allows you to search inside embedded objects—for example, finding products where any color option matches a search term.
// Index definition for a product with nested fields and arrays
{
'mappings': {
'dynamic': false,
'fields': {
'name': { 'type': 'string', 'analyzer': 'lucene.standard' },
'variants.color': { 'type': 'string', 'analyzer': 'lucene.keyword' },
'variants.size': { 'type': 'string', 'analyzer': 'lucene.keyword' },
'reviews.text': { 'type': 'string', 'analyzer': 'lucene.english' },
'reviews.rating': { 'type': 'number' }
}
}
}Verifying the Index With $search
Once your Atlas Search index is READY, test it with a $search aggregation stage. The simplest query uses the text operator to search for a keyword across indexed string fields. A successful response confirms the index is built and queries are working. Examine the searchScore in the projected output to understand relevance ranking.
// Quick verification query
db.products.aggregate([
{
$search: {
index: 'default', // name of your search index
text: {
query: 'wireless headphones',
path: { wildcard: '*' } // search all indexed fields
}
}
},
{
$project: {
name: 1,
category: 1,
price: 1,
score: { $meta: 'searchScore' }
}
},
{ $limit: 5 }
])Index Naming and Multiple Indexes
You can create multiple Atlas Search indexes on the same collection, each with a different name, field configuration, and analyzers. This allows different use cases to use specialized indexes—a general search index with dynamic mapping, a strict-matching index with keyword analyzers, and an autocomplete index. When running a $search query, specify the index field to select which search index to use.
// Using a named search index in a $search query
db.products.aggregate([
{
$search: {
index: 'products_autocomplete', // use the autocomplete-specific index
autocomplete: {
query: 'wire',
path: 'name'
}
}
}
]);Quick Check
Test your understanding of MongoDB & NoSQL Databases concepts from this lesson.
Lesson Recap
In this lesson you learned: Atlas Search is a Lucene-based full-text search engine embedded in MongoDB Atlas, dynamic mapping indexes all fields automatically while static mapping requires explicit field definitions for finer control, and analyzers like lucene.standard, lucene.english, and lucene.keyword control how text is tokenized and stored. Next up we explore writing $search aggregation queries including text, phrase, and wildcard operators.
자주 묻는 질문
“Atlas Search 인덱스 만들기” 강의는 무료인가요?
네 — “Atlas Search 인덱스 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 MongoDB Academy 강의 전체를 잠금 해제할 수 있습니다. MongoDB Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Atlas Search 인덱스 만들기”에서 뭘 배우나요?
학습자는 Atlas UI 또는 API를 통해 검색 인덱스 매핑을 정의하고 Lucene이 필드 값을 토큰화하고 저장하는 방식을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 MongoDB Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
MongoDB Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 MongoDB Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“Atlas Search 인덱스 만들기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 MongoDB Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 MongoDB Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Atlas Search 인덱스 만들기
- $search 쿼리 작성하기: 텍스트, 구문, 와일드카드
- 자동 완성 및 퍼지 일치
- 패싯 및 복합 쿼리