MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment fonctionne la recherche MongoDB $text ?

La recherche de texte MongoDB utilise la bibliothèque de radicaux Snowball pour réduire les mots à une forme racine attendue (ou stem ) sur la base de règles linguistiques communes. La radicalisation algorithmique permet une réduction rapide, mais les langues ont des exceptions (telles que des schémas de conjugaison de verbes irréguliers ou contradictoires) qui peuvent affecter la précision. L'Introduction à la boule de neige comprend un bon aperçu de certaines des limites de la radicalisation algorithmique.

Votre exemple de walking revient à walking et correspond comme prévu.

Cependant, votre exemple de trekking vient de trekk ne correspond donc pas à votre mot-clé de recherche de trek .

Vous pouvez le confirmer en expliquant votre requête et en examinant le parsedTextQuery informations indiquant les termes de recherche radical utilisés :

db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
​   "terms" : [
​       "trekk"
​   ],
​   "negatedTerms" : [ ],
​   "phrases" : [ ],
​   "negatedPhrases" : [ ]
}

Vous pouvez également vérifier le stemming attendu de Snowball à l'aide de la Démo Snowball ou en trouvant une bibliothèque Snowball pour votre langage de programmation préféré.

Pour contourner les exceptions susceptibles d'affecter votre cas d'utilisation, vous pouvez envisager d'ajouter un autre champ à votre index de texte avec des mots-clés pour influencer les résultats de la recherche. Pour cet exemple, vous ajouteriez trek comme mot-clé afin que l'événement décrit comme trekking correspond également à vos résultats de recherche.

Il existe d'autres approches pour une inflexion plus précise qui sont généralement appelées lemmatisation . Les algorithmes de lemmatisation sont plus complexes et commencent à entrer dans le domaine du traitement du langage naturel . Il existe de nombreuses boîtes à outils open source (et commerciales) que vous pouvez exploiter si vous souhaitez implémenter une recherche de texte plus avancée dans votre application, mais celles-ci sortent du cadre actuel de la fonctionnalité de recherche de texte de MongoDB.