Die MongoDB-Textsuche verwendet die Snowball-Stemming-Bibliothek um Wörter auf eine erwartete Stammform (oder Stamm) zu reduzieren ) auf der Grundlage gemeinsamer Sprachregeln. Algorithmisches Stemming bietet eine schnelle Reduzierung, aber Sprachen haben Ausnahmen (z. B. unregelmäßige oder widersprüchliche Verbkonjugationsmuster), die die Genauigkeit beeinträchtigen können. Die Snowball-Einführung enthält einen guten Überblick über einige der Einschränkungen des algorithmischen Stemmings.
Ihr Beispiel für walking
Stiele zum walking
und stimmt wie erwartet überein.
Aber Ihr Beispiel für trekking
stammt von trekk
stimmt also nicht mit Ihrem Suchbegriff trek
überein .
Sie können dies bestätigen, indem Sie Ihre Anfrage erläutern und die parsedTextQuery
überprüfen Informationen, die die verwendeten gekürzten Suchbegriffe zeigen:
db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
"terms" : [
"trekk"
],
"negatedTerms" : [ ],
"phrases" : [ ],
"negatedPhrases" : [ ]
}
Sie können auch das erwartete Snowball-Stemming mit der Online-Snowball-Demo überprüfen oder indem Sie eine Snowball-Bibliothek für Ihre bevorzugte Programmiersprache finden.
Um Ausnahmen zu umgehen, die sich häufig auf Ihren Anwendungsfall auswirken, können Sie Ihrem Textindex ein weiteres Feld mit Schlüsselwörtern hinzufügen, um die Suchergebnisse zu beeinflussen. Für dieses Beispiel würden Sie trek
hinzufügen als Schlüsselwort, damit das Ereignis als trekking
beschrieben wird passt auch in Ihren Suchergebnissen.
Es gibt andere Ansätze für eine genauere Beugung, die allgemein als Lemmatisierung bezeichnet werden . Lemmatisierungsalgorithmen sind komplexer und gehen in den Bereich der Verarbeitung natürlicher Sprache über . Es gibt viele Open-Source- (und kommerzielle) Toolkits, die Sie möglicherweise nutzen können, wenn Sie eine erweiterte Textsuche in Ihrer Anwendung implementieren möchten, aber diese liegen außerhalb des aktuellen Umfangs der MongoDB-Textsuchfunktion.