我的Express应用程序必须进行部分搜索。
我的主题模型:
var mongoose = require("mongoose");
var subjectschema = new mongoose.Schema({
Subject_Name: String,
Subject_DOB: Date,
Subject_Address: String,
Subject_City: String,
Subject_Prov: String,
Subject_zip: String,
Subject_Country: String
},{ strict: false });
subjectschema.index({ Subject_Name: "text" })
module.exports = mongoose.model("subject", subjectschema);
我的搜索路线(POST):
router.post("/visit", middleware.isLoggedin, function(req,res){
var text = req.body.user;
subject.find({ $text:{$search: text}}).sort('Visit_date').exec(function(err,returnedsubjects){
if(err){
console.log(err);
} else {
console.log(returnedsubjects);
res.render("visit",{returnedsubjects: returnedsubjects});
}
});
});
MongoDB中的Subject_Name是“ Steven Smith” *我的搜索不区分大小写(太好了!)。可以搜索“史蒂文”或“史蒂文”。 我可以做部分完整的单词。可以搜索“史蒂文”或“史密斯”
但是,如果我搜索“ Steve”或“ ste”,我认为它将找到该记录。但事实并非如此。
如何进行搜索?
谢谢!
答案 0 :(得分:0)
Mongo文本索引不支持部分搜索或模糊搜索。 https://docs.mongodb.com/manual/text-search/
更多地将其视为关键字搜索。您可以使用不推荐使用的正则表达式,因为它不使用任何索引,并且会对集合执行完全扫描。
ElasticSearch是一个用于字符串搜索的更优化的数据库。
或者您可以使用Algolia https://www.algolia.com/