Tak, możesz użyć wyszukiwania pełnotekstowego w Mongoose>=3.8.9. Po pierwsze, kolekcja może mieć co najwyżej jeden indeks tekstowy (patrz doc). Tak więc, aby zdefiniować indeks tekstowy dla kilku pól, potrzebujesz indeksu złożonego:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Teraz możesz używać $text operator zapytania w ten sposób:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Spowoduje to również posortowanie wyników według oceny trafności.
Jeśli chodzi o wagi, możesz spróbować przekazać obiekt opcji wag do index()
metoda (w której definiujesz indeks złożony) (działa co najmniej z wersją 4.0.1 mangusty):
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});