MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pesquisa de texto completo com peso em mangusto


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}});