MongoDB - Recherche de texte
-
10-12-2019 - |
Question
Quelle est la meilleure stratégie de sélection des entrées de Mongodb dans lesquelles une valeur de chaîne contient un ensemble de mots ou de phrases?Je pense à quelque chose d'équivalent à la fonction similaire de MySQL, par exemple
WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %")
J'ai vu des options qui impliquent la joigation de la chaîne, mais cela impliquerait de construire Unigrams pour tout le texte, ce qui serait immense non?
La solution
MongoDB n'a aucune capacité de recherche de texte complète en ce moment, mais il est facile d'utiliser des moteurs de recherche externes tels que SOLR.
Je décourage fortement que vous essayez de reconstruire la recherche de texte avec regex ou mot stemming, etc. vous-même.Vous devriez plutôt vous concentrer sur votre application propre Caractéristiques :)
J'utilise cette combinaison: mongoïde , Sunspot et Mongoid-Sunspot .Cela fonctionne très bien en production et la configuration de développement est facile.
Autres conseils
Mongo prend désormais en charge la recherche de texte depuis 2,4. Mon expérience a été assez positive
http://docs.mongodb.org/manual/applications/text-Search/
Vous démarrez le serveur avec la recherche de texte SETPARAMETER activée. Puis activez l'index sur la collection Puis recherchez avec RunCommand
Vous pouvez utiliser le support d'expression régulier dans les requêtes de MongoDB.Plus de détails disponibles @ Le lien suivant
http://docs.mongodb.org/manual/Reference/Operator/regex/
Voici deux exemples si le lien ci-dessus doit se déplacer à nouveau à l'avenir:
db.collection.find( { field: /acme.*corp/i } );
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );
La recherche de texte intégrée de MongoDB n'a pas réussi à répondre à mes exigences sur une base de données existante qui a utilisé un indice composé.J'utilise maintenant Mongoose-Search-plugin et il fonctionnait superbement bien.Il utilise des algorithmes naturels stemming et de distance pour renvoyer un score de pertinence.
User.search('Malaysia Car Food',{username:1},{}, function(err, u){
console.log('Search Results: '+JSON.stringify(u));
});