Sí, puede utilizar la búsqueda de texto completo en Mongoose>=3.8.9. En primer lugar, una colección puede tener como máximo un índice de texto (ver documentos). Entonces, para definir el índice de texto para varios campos, necesita un índice compuesto:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Ahora puedes usar $text operador de consulta como este:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Esto también ordenará los resultados por puntuación de relevancia.
En cuanto a los pesos, puede intentar pasar el objeto de opciones de pesos a index()
método (donde define el índice compuesto) (trabajando al menos con v4.0.1 de mongoose):
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});