Нечеткий поиск с Mongodb?
мне удалось настроить функцию поиска в моем приложении mongodb. См. код ниже. Это работает очень хорошо, однако он возвращает только точные результаты. Как изменить код, чтобы он принимал более "нечеткие" Результаты поиска? Спасибо!
router.get("/", function(req, res){
if (req.query.search) {
Jobs.find({"name": req.query.search}, function(err, foundjobs){
if(err){
console.log(err);
} else {
res.render("jobs/index",{jobs:foundjobs});
}
});
}
Jobs.find({}, function(err, allJobs){
if(err){
console.log(err);
} else {
res.render("jobs/index",{jobs:allJobs});
}
});
});
1 ответов
Я считаю, что для выполнения "нечеткого" поиска вам нужно будет использовать регулярное выражение. Это должно выполнить то, что вы ищете (источник функции escapeRegex здесь):
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 });
}
});
}
}
при этом ваше приложение может испытывать проблемы с производительностью при запросе mongo с помощью regex. Использование библиотеки как поиск-индекс для поиска может помочь оптимизировать производительность вашего приложения, с дополнительным преимуществом поиска Word stems (например, возврат "найдено" из "находить.)"
UPDATE: мой первоначальный ответ включал простое регулярное выражение, которое оставило бы ваше приложение уязвимым для regex DDoS атака. Я обновил" безопасное " сбежавшее регулярное выражение.