sql >> Databáze >  >> NoSQL >> MongoDB

Fuzzy Searching s Mongodb?

Věřím, že pro „fuzzy“ vyhledávání budete muset použít regulární výraz. To by mělo splnit to, co hledáte (zdroj funkce escapeRegex zde):

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

Jak již bylo řečeno, vaše aplikace může mít problémy s výkonem při dotazování mongo podle regulárního výrazu. Použití knihovny, jako je search-index pro vyhledávání, může pomoci optimalizovat výkon vaší aplikace s přidanou výhodou hledání kmenů slov (jako je vrácení „nalezeno“ z „najít“).

AKTUALIZACE:Moje původní odpověď obsahovala jednoduché pravidelné vyjádření, které by vaši aplikaci nechalo zranitelnou vůči regex DDoS útoku. Aktualizoval jsem pomocí „bezpečného“ regulárního výrazu s kódem Escape.



  1. Rozdíl mezi ukládáním ObjectId a jeho řetězcovou formou v MongoDB

  2. Aktualizace MongoDB Deep Array

  3. MongoDB:Závažná chyba:Třída 'MongoClient' nebyla nalezena

  4. python-rq worker se automaticky zavře