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

Recherche plein texte avec poids en mangouste

Oui, vous pouvez utiliser la recherche en texte intégral dans Mongoose>=3.8.9. Premièrement, une collection peut avoir au plus un index de texte (voir docs). Ainsi, pour définir un index de texte pour plusieurs champs, vous avez besoin d'un index composé :

schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });

Vous pouvez maintenant utiliser $text opérateur de requête comme celui-ci :

Model
    .find(
        { $text : { $search : "text to look for" } }, 
        { score : { $meta: "textScore" } }
    )
    .sort({ score : { $meta : 'textScore' } })
    .exec(function(err, results) {
        // callback
    });

Cela triera également les résultats par score de pertinence.

En ce qui concerne les poids, vous pouvez essayer de passer l'objet d'options de poids à index() méthode (où vous définissez l'index composé) (fonctionnant au moins avec la v4.0.1 de mangouste):

schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});