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

Recherche en texte intégral MongoDB + solution de contournement pour la correspondance partielle des mots

Stemming de la langue dans la recherche de texte utilise un algorithme pour essayer de relier les mots dérivés d'une base commune (par exemple, "running" doit correspondre à "run"). Ceci est différent de la correspondance de préfixe (par exemple, "bleu" correspondant à "myrtille") que vous souhaitez implémenter pour une fonctionnalité de saisie semi-automatique.

Pour utiliser plus efficacement typeahead.js avec la recherche de texte MongoDB, je suggérerais de se concentrer sur le prefetch prise en charge de la frappe :

  • Créer un keywords collection qui contient les mots courants (peut-être avec le nombre de fréquences d'utilisation) utilisés dans votre collection. Vous pouvez créer cette collection en exécutant une Map/Reduce à travers la collection sur laquelle vous avez l'index de recherche de texte, et gardez la liste de mots à jour en utilisant un périodique Carte/Réduction incrémentielle au fur et à mesure que de nouveaux documents sont ajoutés.

  • Demandez à votre application de générer un document JSON à partir des keywords collection avec les mots-clés uniques (peut-être limités aux mots-clés "populaires" basés sur la fréquence des mots pour que la liste reste gérable/pertinente).

Vous pouvez ensuite utiliser les mots-clés générés JSON pour la saisie semi-automatique côté client avec le prefetch de typeahead fonctionnalité :

$('.mysearch .typeahead').typeahead({
  name: 'mysearch',
  prefetch: '/data/keywords.json'
});

typeahead.js mettra en cache le prefetch Données JSON dans localStorage pour les recherches côté client. Lorsque le formulaire de recherche est soumis, votre application peut utiliser le côté serveur MongoDB recherche de texte pour renvoyer les résultats complets par ordre de pertinence.