MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ricerca full-text con peso in mangusta

Sì, puoi utilizzare la ricerca a tutto testo in Mongoose>=3.8.9. In primo luogo, una raccolta può avere al massimo un indice di testo (vedi documenti). Quindi, per definire l'indice di testo per più campi, è necessario l'indice composto:

schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });

Ora puoi usare $text operatore di query in questo modo:

Model
    .find(
        { $text : { $search : "text to look for" } }, 
        { score : { $meta: "textScore" } }
    )
    .sort({ score : { $meta : 'textScore' } })
    .exec(function(err, results) {
        // callback
    });

Questo ordinerà anche i risultati in base al punteggio di pertinenza.

Per quanto riguarda i pesi, puoi provare a passare l'oggetto opzioni pesi a index() metodo (dove definisci l'indice composto) (funziona almeno con la v4.0.1 di mangusta):

schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});