Sì, puoi utilizzare la ricerca a tutto testo in Mongoose>=3.8.9. In primo luogo, una raccolta può avere al massimo un indice di testo (vedi documenti). Quindi, per definire l'indice di testo per più campi, è necessario l'indice composto:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Ora puoi usare $text operatore di query in questo modo:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Questo ordinerà anche i risultati in base al punteggio di pertinenza.
Per quanto riguarda i pesi, puoi provare a passare l'oggetto opzioni pesi a index()
metodo (dove definisci l'indice composto) (funziona almeno con la v4.0.1 di mangusta):
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});