MongoDB Academy · Ders

Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı

Öğrenenler, yerel metin dizinlerinin kısıtlarını (koleksiyon başına bir dizin ve dil desteği) belirleyecek ve Atlas Search'ün ne zaman daha iyi bir seçenek olduğuna karar vereceklerdir.

4. ders / 413 adım

Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 4. 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.

Metin Dizini Sınırlamalarına Genel Bakış

MongoDB'nin yerleşik metin dizini, tam metin araması için iyi bir başlangıçtır; ancak arama gereksinimleriniz arttıkça önem kazanan birkaç önemli sınırlaması vardır. Bu kısıtlamaları anlamak, yerel metin dizinine yatırım yapmaya mı yoksa Atlas Search gibi özel bir arama motoruna geçmeye mi erken karar vermenize yardımcı olur.

Koleksiyon Başına Bir Metin Dizini

En etkili sınırlama, her koleksiyonda yalnızca bir metin dizini bulunabilmesidir. Bu, aynı koleksiyonda farklı arama senaryoları için ayrı metin dizinlerine sahip olamayacağınız anlamına gelir; her şeyi tek bir dizin tanımında birleştirmeniz gerekir. Arama gereksinimleriniz değişir ve dizine alan eklemeniz ya da dizinden alan çıkarmanız gerekirse, zaman alabilecek tüm metin dizinini silip yeniden oluşturmanız gerekir; bu işlem büyük koleksiyonlarda özellikle uzun sürebilir.

// Can't have two text indexes on the same collection
db.articles.createIndex({ title: 'text' });  // OK
// db.articles.createIndex({ body: 'text' });  // ERROR!

// Must combine everything into one:
db.articles.dropIndex('title_text');  // rebuild required
db.articles.createIndex({ title: 'text', body: 'text' });

Otomatik Tamamlama Desteği Yoktur

Yerel metin dizinlerinde otomatik tamamlama özelliği yoktur. Bu dizinler (kök bulma işleminden sonra) tam sözcüklerle eşleşir, ancak kısmi girişler için tamamlama öneremez. Örneğin 'mongo' araması, 'mongodb' içeren belgelerle eşleşmez; çünkü 'mongo' ve 'mongodb' farklı belirteçlere indirgenir. Yerel metin dizinleriyle otomatik tamamlama uygulamak, n-gram'leri depolamak gibi karmaşık ve verimsiz geçici çözümler gerektirir.

// Native text index: partial word does NOT match
db.articles.find({ $text: { $search: 'mongo' } });
// Will NOT return docs with 'mongodb' because
// 'mongo' stems to 'mongo', 'mongodb' stems to 'mongodb'
// These are different index tokens

// Atlas Search: autocomplete field supports partial matching
// { $search: { autocomplete: { query: 'mongo', path: 'title' } } }

Yaklaşık Eşleşme Yoktur

Yerel metin dizinlerinde yaklaşık eşleşme özelliği yoktur. 'mongodab' gibi bir yazım hatası 'mongodb' ile eşleşmez; belirtecin aynı köke indirgenecek kadar yakın olması gerekir. Yazım hatalarının yaygın olduğu kullanıcı arama kutularında bu durum, sonuç bulunamayan ve kullanıcıyı zorlayan aramalarla sonuçlanır. Atlas Search, yazım hatalarını uygun şekilde ele almak için yapılandırılabilir düzenleme uzaklığına sahip bir fuzzy seçeneği sunar.

// Native $text: typo returns NO results
db.articles.find({ $text: { $search: 'mongodab' } }); // 0 results

// Atlas Search fuzzy option handles typos
// db.articles.aggregate([{
//   $search: {
//     text: {
//       query: 'mongodab',
//       path: 'title',
//       fuzzy: { maxEdits: 2 }  // tolerates up to 2 character edits
//     }
//   }
// }]);

Sınırlı Dil Desteği

Yerel metin dizinleri, kök bulma ve durma sözcükleri için yaklaşık 15 dili destekler. Bu kapsam Batı Avrupa dillerinin çoğu için yeterli olsa da sözcüklere ayırmadan önce sözcük sınırlarının algılanmasını gerektiren Çince, Japonca, Korece, Arapça ve diğer birçok dil desteklenmez. Atlas Search, çok daha geniş bir dil kümesini ve betiğe özgü belirteçlere ayırma kurallarını destekleyen Lucene çözümleyicilerini kullanır.

// Supported natively: english, french, german, spanish, portuguese,
// italian, dutch, danish, norwegian, swedish, finnish,
// romanian, turkish, russian (with caveats)

// NOT supported natively:
// Chinese (no word boundaries), Japanese, Korean, Arabic
// Must use Atlas Search or an external search engine for these
db.articles.createIndex({ body: 'text' }, { default_language: 'english' });

Eş Anlamlı Sözcük Desteği Yoktur

Yerel metin dizinleri, arama terimlerini synonyms içerecek şekilde genişletemez. Kullanıcı 'automobile' araması yaparsa yalnızca 'car' içeren belgeler eşleşmez. Atlas Search, dizin tanımında yapılandırdığınız eş anlamlı eşlemelerini destekler; böylece uygulama düzeyinde sorguyu yeniden yazmadan kapsamlı eş anlamlı genişletmesi yapabilirsiniz.

// Native text: no synonym expansion
// 'car' search does NOT match 'automobile' documents
db.articles.find({ $text: { $search: 'car' } });

// Workaround: client-side synonym expansion (brittle)
const synonyms = { car: ['automobile', 'vehicle', 'auto'] };
const expandedSearch = [search, ...synonyms[search]].join(' ');
db.articles.find({ $text: { $search: expandedSearch } });

// Atlas Search: configure synonyms in the index definition

Büyük Ölçekte Performans

Yerel metin dizinleri tüm belirteçleri, işlemsel verilerinizle aynı depolama motorundaki tek bir WiredTiger B-tree içinde depolar. Büyük veri kümelerinde (uzun metin alanlarına sahip on milyonlarca belgede) bu durum, genel veritabanı performansını düşüren yazma çoğaltımına ve önbellek baskısına yol açabilir. Atlas Search'ü destekleyen Lucene gibi özel arama motorları, sıkıştırmalı ters dizinler kullanarak büyük belirteç depoları için mimari açıdan iyileştirilmiştir.

// Monitor text index size vs other indexes
const stats = db.articles.stats();
console.log('Index sizes:', stats.indexSizes);
// If text index is 10x larger than next biggest index,
// consider Atlas Search to offload the storage overhead

Atlas Search Nedir?

Atlas Search, MongoDB Atlas içine yerleşik, tamamen yönetilen ve Apache Lucene tabanlı bir arama motorudur. Atlas kümeniz içinde ayrı bir hizmet olarak çalışır ve koleksiyonlarınızdaki verileri otomatik olarak çoğaltır. Atlas Search, $text yerine toplama işlemindeki $search aşamasını kullanır ve aynı MongoDB bağlantı dizesiyle otomatik tamamlama, yaklaşık eşleşme, fasetler, eş anlamlılar, özel puanlama ve kapsamlı dil desteği sunar.

// Atlas Search uses $search aggregation stage
db.articles.aggregate([
  { $search: {
    text: {
      query: 'mongodb tutorial',
      path: ['title', 'body'],
      fuzzy: { maxEdits: 1 }
    }
  }},
  { $limit: 10 },
  { $project: { title: 1, score: { $meta: 'searchScore' } } }
]);

Karar Matrisi: Metin Dizini ve Atlas Search

Şu durumlarda yerel metin dizinini kullanın: koleksiyonunuzda 1 milyondan az belge varsa; kullanıcılarınız tek bir Batı Avrupa dilinde arama yapıyorsa; yazım hataları veya otomatik tamamlama olmadan temel anahtar sözcük aramasına ihtiyacınız varsa; ek altyapı maliyeti istemiyorsanız. Şu durumlarda Atlas Search kullanın: otomatik tamamlama veya yaklaşık aramaya ihtiyacınız varsa; kullanıcı tabanınız birden çok dilde ya da Latin alfabesi dışındaki yazı sistemlerinde arama yapıyorsa; fasetli gezinti gerekiyorsa; metin aramanız ürünün merkezindeyse ve ölçeklenmesi gerekiyorsa.

// Native text: simple, zero extra cost, one language
// Good for: admin search, internal tools, small product
db.products.createIndex({ name: 'text', description: 'text' });

// Atlas Search: richer, requires Atlas M10+ cluster
// Good for: customer-facing search, multilingual, autocomplete
// Create via Atlas UI or API, then use $search in aggregation

Metin Dizininden Atlas Search'e Geçiş

Yerel metinden Atlas Search'e geçmek veri modelinizi değiştirmenizi gerektirmez; Atlas Search aynı koleksiyonu dizinler. Geçiş adımları şöyledir: 1) Atlas kullanıcı arayüzü veya API üzerinden koleksiyonda bir Atlas Search dizini oluşturun; 2) find({ $text: ... }) sorgularınızı $search toplama aşamasını kullanacak şekilde yeniden yazın; 3) sonuçları test edip doğrulayın; 4) depolama alanını boşaltmak için eski metin dizinini silin. Belgeleriniz taşınmaz; yalnızca dizin ve sorgu söz dizimi değişir.

// BEFORE (native text)
db.articles.find(
  { $text: { $search: 'mongodb' } },
  { score: { $meta: 'textScore' } }
).sort({ score: { $meta: 'textScore' } });

// AFTER (Atlas Search - same result set, richer options)
db.articles.aggregate([
  { $search: { text: { query: 'mongodb', path: ['title', 'body'] } } },
  { $addFields: { score: { $meta: 'searchScore' } } },
  { $sort: { score: -1 } }
]);

Hiçbiri Yeterli Olmadığında

Çok zorlu arama gereksinimleri için—özel makine öğrenmesi tabanlı sıralama, vektör benzerliği araması (anlamsal arama), büyük ölçekte çok kiracılı kullanım veya sorgu planlarını bütünüyle gözlemleme—Atlas Search bile yeterli olmayabilir. Bu durumlarda Elasticsearch, Solr veya Typesense gibi özel arama platformları MongoDB'nin yanında kullanılır; değişiklik akışları veya ETL kullanan bir eşitleme katmanı, arama dizinini MongoDB'deki gerçek kaynakla eşit durumda tutar.

// Architecture pattern: MongoDB + external search engine
// 1. Write data to MongoDB (source of truth)
// 2. Change stream replicates new/updated docs to Elasticsearch
// 3. Search queries go to Elasticsearch
// 4. Read queries for known IDs go directly to MongoDB

// MongoDB change stream listener (Node.js)
const changeStream = db.articles.watch();
for await (const change of changeStream) {
  await elasticsearchClient.index({ id: change.documentKey._id, ...change.fullDocument });
}

Kısa Kontrol

Metin dizinlerinin sınırlamaları ve Atlas Search konusundaki anlayışınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: yerel metin dizinlerinin koleksiyon başına bir dizin, otomatik tamamlama olmaması, yaklaşık eşleşme olmaması ve sınırlı dil desteği gibi önemli kısıtlamaları vardır; Atlas Search (Lucene tabanlı) bu sorunları otomatik tamamlama, yaklaşık eşleşme, eş anlamlılar ve geniş dil kapsamıyla çözer; doğru seçim ölçeğe ve özellik gereksinimlerine bağlıdır. Sırada dizi işleçlerini ve sorgularını inceleyeceğiz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı” dersi ücretsiz mi?

Evet — “Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı” 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.

“Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı” dersinde ne öğreneceğim?

Öğrenenler, yerel metin dizinlerinin kısıtlarını (koleksiyon başına bir dizin ve dil desteği) belirleyecek ve Atlas Search'ün ne zaman daha iyi bir seçenek olduğuna karar vereceklerdir. 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 4. dersidir.

“Metin Dizini Sınırlamaları ve Atlas Search Kullanım Zamanı” 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