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?

Était-ce utile?

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));
}); 

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top