Ano, můžete použít fulltextové vyhledávání v Mongoose>=3.8.9. Za prvé, kolekce může mít maximálně jeden textový index (viz dokumenty). Chcete-li tedy definovat textový index pro několik polí, potřebujete složený index:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Nyní můžete použít $text dotazovací operátor takto:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Tím se také seřadí výsledky podle skóre relevance.
Pokud jde o váhy, můžete zkusit předat objekt voleb vah do index()
metoda (kde definujete složený index) (pracuje alespoň s verzí 4.0.1 mongoose):
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});