Sim, você pode usar a pesquisa de texto completo no Mongoose>=3.8.9. Em primeiro lugar, uma coleção pode ter no máximo um índice de texto (consulte a documentação). Portanto, para definir o índice de texto para vários campos, você precisa do índice composto:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Agora você pode usar $text operador de consulta assim:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Isso também classificará os resultados por pontuação de relevância.
Quanto aos pesos, você pode tentar passar o objeto de opções de pesos para
index()
método (onde você define o índice composto) (trabalhando pelo menos com a v4.0.1 do mangusto):schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});