Einschränkungen von Textindizes und der Einsatz von Atlas Search
Sie erkennen die Einschränkungen nativer Textindizes – einen Index pro Collection und begrenzte Sprachunterstützung – und entscheiden, wann Atlas Search die bessere Wahl ist.
Einschränkungen von Textindizes und der Einsatz von Atlas Search ist eine kostenlose MongoDB Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des MongoDB Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der MongoDB Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick über die Einschränkungen von Textindizes
Der integrierte Textindex von MongoDB ist ein guter Ausgangspunkt für die Volltextsuche, weist jedoch mehrere wichtige Einschränkungen auf, die mit steigenden Anforderungen an die Suche zunehmend relevant werden. Wenn Sie diese Einschränkungen kennen, können Sie frühzeitig entscheiden, ob Sie in den nativen Textindex investieren oder zu einer spezialisierten Suchmaschine wie Atlas Search wechseln sollten.
Ein Textindex pro Collection
Die folgenreichste Einschränkung besteht darin, dass jede Collection nur einen Textindex haben kann. Sie können daher nicht für unterschiedliche Suchszenarien separate Textindizes für dieselbe Collection anlegen. Alles muss in einer einzigen Indexdefinition zusammengeführt werden. Wenn sich Ihre Suchanforderungen ändern und Sie Felder zum Index hinzufügen oder daraus entfernen müssen, müssen Sie den gesamten Textindex löschen und neu erstellen. Bei großen Collections kann dies zeitaufwendig sein.
// 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' });Keine Autocomplete-Unterstützung
Native Textindizes bieten keine Autocomplete-Funktion. Sie finden ganze Wörter (nach dem Stemming), können aber keine Vervollständigungen für unvollständige Eingaben vorschlagen. Eine Suche nach „mongo“ findet beispielsweise KEINE Dokumente, die „mongodb“ enthalten, da „mongo“ und „mongodb“ zu unterschiedlichen Token-Stämmen verarbeitet werden. Autocomplete mit nativen Textindizes zu implementieren, erfordert aufwendige Umgehungslösungen wie das Speichern von n-Grammen und ist daher ineffizient.
// 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' } } }Keine unscharfe Suche
Native Textindizes bieten keine unscharfe (ungefähre) Suche. Ein Tippfehler wie „mongodab“ findet „mongodb“ nicht – das Token muss ähnlich genug sein, um auf denselben Stamm reduziert zu werden. Bei Suchfeldern für Benutzer, in denen Tippfehler häufig vorkommen, führt dies zu frustrierenden Suchen ohne Ergebnisse. Atlas Search bietet eine fuzzy-Option mit konfigurierbarer Editierdistanz, um Tippfehler zuverlässig zu verarbeiten.
// 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
// }
// }
// }]);Eingeschränkte Sprachunterstützung
Native Textindizes unterstützen für Stemming und Stoppwörter etwa 15 Sprachen. Damit werden die meisten westeuropäischen Sprachen abgedeckt, es gibt jedoch keine Unterstützung für Chinesisch, Japanisch, Koreanisch und Arabisch sowie viele weitere Sprachen, bei denen vor der Tokenisierung Wortgrenzen erkannt werden müssen. Atlas Search verwendet Lucene-Analysatoren, die eine deutlich größere Sprachauswahl und sprach- bzw. schriftspezifische Tokenisierungsregeln unterstützen.
// 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' });Keine Synonymunterstützung
Native Textindizes können Suchbegriffe nicht um Synonyme erweitern. Sucht ein Benutzer beispielsweise nach „Automobil“, finden Dokumente, die nur „Auto“ enthalten, keine Übereinstimmung. Atlas Search unterstützt Synonymzuordnungen, die Sie in der Indexdefinition konfigurieren. Dadurch ist eine umfangreiche Synonymerweiterung ohne Umschreiben der Abfragen auf Anwendungsebene möglich.
// 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 definitionPerformance bei großen Datenmengen
Native Textindizes speichern alle Token in einem einzigen WiredTiger-B-Baum innerhalb derselben Speicher-Engine wie Ihre operativen Daten. Bei großen Textbeständen (zig Millionen Dokumente mit langen Textfeldern) kann dies zu Schreibverstärkung und Cache-Druck führen und dadurch die Gesamtperformance der Datenbank beeinträchtigen. Spezialisierte Suchmaschinen wie Lucene (die Atlas Search zugrunde liegt) sind architektonisch auf große Tokenbestände ausgelegt und verwenden komprimierte invertierte Indizes.
// 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 overheadWas ist Atlas Search?
Atlas Search ist eine vollständig verwaltete, auf Apache Lucene basierende Suchmaschine, die in MongoDB Atlas integriert ist. Sie läuft als separater Dienst innerhalb Ihres Atlas-Clusters und repliziert Daten aus Ihren Collections automatisch. Atlas Search verwendet die Aggregationsphase $search anstelle von $text und bietet Autocomplete, unscharfe Suche, Facetten, Synonyme, benutzerdefinierte Bewertung und umfassende Sprachunterstützung – mit derselben MongoDB-Verbindungszeichenfolge.
// 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' } } }
]);Entscheidungsmatrix: Textindex oder Atlas Search
Verwenden Sie den nativen Textindex, wenn Ihre Collection weniger als 1 Million Dokumente enthält, Ihre Benutzer in einer westeuropäischen Sprache suchen, Sie eine einfache Stichwortsuche ohne Tippfehler oder Autocomplete benötigen oder keine zusätzlichen Infrastrukturkosten anfallen sollen. Verwenden Sie Atlas Search, wenn Sie Autocomplete oder eine unscharfe Suche benötigen, Ihre Benutzer in mehreren oder nicht-lateinischen Sprachen suchen, Sie eine facettierte Navigation brauchen oder die Textsuche zentral für Ihr Produkt ist und skalieren muss.
// 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 aggregationVom Textindex zu Atlas Search migrieren
Für die Migration von nativem Text zu Atlas Search müssen Sie Ihr Datenmodell nicht ändern – Atlas Search indiziert dieselbe Collection. Die Migrationsschritte sind: 1) Erstellen Sie über die Atlas-Benutzeroberfläche oder API einen Atlas-Search-Index für die Collection; 2) Schreiben Sie Ihre find({ $text: ... })-Abfragen so um, dass sie die Aggregationsphase $search verwenden; 3) Testen und validieren Sie die Ergebnisse; 4) Löschen Sie den alten Textindex, um Speicherplatz freizugeben. Ihre Dokumente werden nicht verschoben; nur der Index und die Abfragesyntax ändern sich.
// 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 } }
]);Wenn beides nicht ausreicht
Bei sehr anspruchsvollen Suchanforderungen – etwa benutzerdefiniertem ML-basiertem Ranking, Vektorsimilaritätssuche (semantischer Suche), Multi-Tenancy im großen Maßstab oder vollständiger Transparenz über Abfragepläne – reicht möglicherweise auch Atlas Search nicht aus. In solchen Fällen werden spezialisierte Suchplattformen wie Elasticsearch, Solr oder Typesense zusammen mit MongoDB eingesetzt. Eine Synchronisierungsschicht (Change Streams oder ETL) hält den Suchindex mit der maßgeblichen Datenquelle in MongoDB synchron.
// 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 });
}Schnelltest
Testen Sie Ihr Verständnis der Einschränkungen von Textindizes und von Atlas Search.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: Native Textindizes weisen wichtige Einschränkungen auf, darunter ein Index pro Collection, kein Autocomplete, keine unscharfe Suche und eingeschränkte Sprachunterstützung; Atlas Search (auf Lucene-Basis) löst diese Probleme mit Autocomplete, unscharfer Suche, Synonymen und einer breiten Sprachabdeckung; und die richtige Wahl hängt von Umfang und Funktionsanforderungen ab. Als Nächstes beschäftigen wir uns mit Array-Operatoren und -Abfragen.
Lerne JavaScript mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „Einschränkungen von Textindizes und der Einsatz von Atlas Search“ kostenlos?
Ja — der vollständige Text von „Einschränkungen von Textindizes und der Einsatz von Atlas Search“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des MongoDB Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der MongoDB Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Einschränkungen von Textindizes und der Einsatz von Atlas Search“?
Sie erkennen die Einschränkungen nativer Textindizes – einen Index pro Collection und begrenzte Sprachunterstützung – und entscheiden, wann Atlas Search die bessere Wahl ist. Du übst MongoDB Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um MongoDB Academy zu starten?
Keine Vorkenntnisse erforderlich. MongoDB Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Einschränkungen von Textindizes und der Einsatz von Atlas Search“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser MongoDB Academy-Lektion Code schreiben und ausführen?
Ja. Jede MongoDB Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Einen Textindex für Zeichenkettenfelder erstellen
- $text-Abfragen mit Phrasen und Negation ausführen
- Mit $meta nach Textscore sortieren
- Einschränkungen von Textindizes und der Einsatz von Atlas Search