MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie funktioniert die $text-Suche in MongoDB?

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.