Ja, du kan använda fulltextsökning i Mongoose>=3.8.9. För det första kan en samling ha högst ett textindex (se dokument). Så för att definiera textindex för flera fält behöver du sammansatt index:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Nu kan du använda $text frågeoperator så här:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Detta kommer också att sortera resultaten efter relevanspoäng.
När det gäller vikter kan du försöka skicka objektet viktalternativ till index()
metod (där du definierar sammansatt index) (fungerar åtminstone med v4.0.1 av mongoose):
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});