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

Fuzzy-Suche mit Mongodb?

Ich glaube, dass Sie für eine "unscharfe" Suche Regex verwenden müssen. Dies sollte das erreichen, wonach Sie suchen (Quelle der EscapeRegex-Funktion hier):

function escapeRegex(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};

router.get("/", function(req, res) {
    if (req.query.search) {
       const regex = new RegExp(escapeRegex(req.query.search), 'gi');
       Jobs.find({ "name": regex }, function(err, foundjobs) {
           if(err) {
               console.log(err);
           } else {
              res.render("jobs/index", { jobs: foundjobs });
           }
       }); 
    }
}

Allerdings kann es bei Ihrer Anwendung zu Leistungsproblemen kommen, wenn Mongo per Regex abgefragt wird. Die Verwendung einer Bibliothek wie search-index for search könnte helfen, die Leistung Ihrer Anwendung zu optimieren, mit dem zusätzlichen Vorteil, Wortstämme zu durchsuchen (wie die Rückgabe von „found“ von „find“).

UPDATE:Meine ursprüngliche Antwort enthielt einen einfachen regulären Ausdruck, der Ihre Anwendung anfällig für einen Regex-DDoS-Angriff machen würde. Ich habe mit einem "sicheren" Escape-Regex aktualisiert.