0Pricing
MongoDB Academy · Ders

Dize Alanında Metin Dizini Oluşturma

Öğrenenler, tek alanlı ve joker karakterli metin dizinleri oluşturacak ve MongoDB'nin uyguladığı belirteçlere ayırma ile kök bulma işlemlerini anlayacaklardır.

Dize Alanında Metin Dizini Oluşturma, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

What Is a Text Index?

A text index is a special MongoDB index type that tokenises and stems the words in string fields so you can run full-text keyword searches. Unlike a regular index that stores exact field values, a text index breaks each string into individual words, removes stop words (like 'the', 'is'), and stores the resulting tokens in a B-tree. This makes it possible to search for 'mongodb tutorial' and match documents containing 'mongodb tutorials'.

Creating a Single-Field Text Index

Pass the string 'text' as the index direction to tell MongoDB to create a text index on that field. You can only have one text index per collection, but it can span multiple fields. The index builds in the background and maintains the token store automatically as documents are inserted or updated.

// Text index on the 'description' field
db.products.createIndex({ description: 'text' });

// Now you can run full-text searches
db.products.find({ $text: { $search: 'wireless headphones' } });

Multi-Field Text Indexes

A single text index can cover multiple string fields, allowing $text queries to search across all of them simultaneously. Each field can be assigned a different weight to influence relevance scoring—a match in a high-weight field like title counts more than a match in a lower-weight field like body.

// Multi-field text index with weights
db.articles.createIndex(
  { title: 'text', body: 'text', tags: 'text' },
  {
    weights: {
      title: 10,  // matches in title score 10x
      tags: 5,
      body: 1
    },
    name: 'idx_articles_text'
  }
);

Wildcard Text Indexes

If you want to search across every string field in a document without listing them all, you can use a wildcard text index with the special '$**' key. MongoDB will automatically tokenise all string-valued fields at any nesting level. This is convenient but creates a larger index than a targeted multi-field text index, so use it thoughtfully.

// Index ALL string fields in every document
db.articles.createIndex({ '$**': 'text' });

// This now searches title, body, author, tags, comments.text, etc.
db.articles.find({ $text: { $search: 'nosql' } });

Tokenisation and Stemming

When MongoDB indexes a string like 'Learning MongoDB databases', it tokenises it into individual words (learning, mongodb, databases), removes stop words, and then stems each token to its root form (e.g., databases → databas). Stemming means a search for 'database' matches documents containing 'databases', 'database', or 'databasing' without needing wildcards.

// The text 'Learning MongoDB databases' is indexed as:
// tokens (after stop-word removal and stemming):
// 'learn', 'mongodb', 'databas'

// All of these queries match the document:
db.articles.find({ $text: { $search: 'learning' } });
db.articles.find({ $text: { $search: 'database' } });
db.articles.find({ $text: { $search: 'databases' } });

Stop Words Are Ignored

Stop words are common words like 'the', 'is', 'at', 'which', and 'on' that carry little meaning and are excluded from the text index to keep it lean. If your search term consists entirely of stop words, the $text query returns no results. Stop word lists are language-specific and controlled by the default_language option on the index.

// Create text index with explicit language
db.articles.createIndex(
  { body: 'text' },
  { default_language: 'english' }  // english stop words (default)
);

// Stop words for English include: the, is, are, at, on, in, a, an...
// Searching for 'the' alone returns nothing
db.articles.find({ $text: { $search: 'the' } }); // 0 results

Language Support

MongoDB's text index supports many languages including english, french, german, spanish, portuguese, italian, dutch, and more. Each language has its own stop word list and stemming rules. You can also set the language to 'none' to disable stop word removal and stemming, treating every token as a literal string.

// Spanish text index
db.articulos.createIndex(
  { contenido: 'text' },
  { default_language: 'spanish' }
);

// Per-document language override (store language in a field)
db.posts.createIndex(
  { body: 'text' },
  { language_override: 'lang' }  // read language from doc.lang field
);
db.posts.insertOne({ body: 'Bonjour le monde', lang: 'french' });

One Text Index Per Collection Rule

MongoDB enforces a hard limit of one text index per collection. This means you must plan all the string fields you want searchable and include them in a single multi-field text index definition. Trying to create a second text index on the same collection will throw an error. If you need to add a field to an existing text index, you must drop and recreate the index.

// First text index on 'title'
db.articles.createIndex({ title: 'text' });

// Trying to add a second text index FAILS:
// db.articles.createIndex({ body: 'text' });
// Error: only one text index per collection allowed

// Correct approach: drop old, recreate with both fields
db.articles.dropIndex('title_text');
db.articles.createIndex({ title: 'text', body: 'text' });

Text Index Storage Overhead

Text indexes can be significantly larger than regular indexes because they store one entry per unique token per document rather than one entry per document. A document with a 500-word description might add hundreds of index entries. Monitor text index size with db.collection.stats().indexSizes and consider whether a dedicated search service (Atlas Search, Elasticsearch) would be more efficient for very large corpora.

// Check text index size
const stats = db.articles.stats();
console.log('Index sizes:', stats.indexSizes);
// idx_articles_text might be 10x larger than a regular index
// on the same number of documents

Combining Text Index With Other Indexes

A text index can be combined with a regular field in a compound index. For example, you can index { category: 1, description: 'text' } to allow filtering by category alongside the text search. In this case the category equality filter dramatically reduces the number of token entries the planner has to examine, making the text query much faster.

// Compound text index with category prefix
db.products.createIndex({ category: 1, description: 'text' });

// This query can use the compound text index efficiently:
// MongoDB filters by category first, then does text search
db.products.find({
  category: 'electronics',
  $text: { $search: 'wireless' }
});

Verifying the Text Index

After creating a text index, use db.collection.getIndexes() to confirm it was created with the correct fields and weights, and run a simple $text query with .explain() to verify the query planner uses a TEXT stage. A TEXT stage in the plan means the text index is actively being used for keyword matching.

// Inspect the text index definition
db.articles.getIndexes().filter(idx => idx.textIndexVersion !== undefined);

// Verify TEXT stage in explain output
db.articles
  .find({ $text: { $search: 'mongodb' } })
  .explain();
// Look for: { stage: 'TEXT', ... }

Quick Check

Test your understanding of MongoDB text indexes from this lesson.

Lesson Recap

In this lesson you learned: text indexes tokenise and stem string fields to enable full-text keyword searches, only one text index is allowed per collection but it can span multiple fields with custom weights, and language determines stop words and stemming rules. Next up we learn to run $text queries with phrases and negation.

Sıkça Sorulan Sorular

“Dize Alanında Metin Dizini Oluşturma” dersi ücretsiz mi?

Evet — “Dize Alanında Metin Dizini Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.

“Dize Alanında Metin Dizini Oluşturma” dersinde ne öğreneceğim?

Öğrenenler, tek alanlı ve joker karakterli metin dizinleri oluşturacak ve MongoDB'nin uyguladığı belirteçlere ayırma ile kök bulma işlemlerini anlayacaklardır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Dize Alanında Metin Dizini Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Dize Alanında Metin Dizini Oluşturma
  2. İfadeler ve Olumsuzlamayla $text Sorguları Çalıştırma
  3. $meta ile textScore'a Göre Sıralama
  4. Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı
← MongoDB Academy Sayfasına Dön