MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Volltextsuche mit Gewicht in Mungo

Ja, Sie können die Volltextsuche in Mongoose>=3.8.9 verwenden. Erstens kann eine Sammlung höchstens einen Textindex haben (siehe Dokumente). Um also einen Textindex für mehrere Felder zu definieren, benötigen Sie zusammengesetzten Index:

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

Jetzt können Sie $text verwenden Abfrageoperator wie folgt:

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

Dadurch werden die Ergebnisse auch nach Relevanzwert sortiert.

Was Gewichte angeht, können Sie versuchen, das Gewichtungsoptionsobjekt an index() zu übergeben Methode (wo Sie zusammengesetzten Index definieren) (funktioniert mindestens mit v4.0.1 von Mongoose):

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