猫鼬-即使使用文本索引也无法进行部分搜索

时间:2019-10-11 18:03:06

标签: node.js express mongoose

我的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”,我认为它将找到该记录。但事实并非如此。

如何进行搜索?

谢谢!

1 个答案:

答案 0 :(得分:0)

Mongo文本索引不支持部分搜索或模糊搜索。 https://docs.mongodb.com/manual/text-search/

更多地将其视为关键字搜索。您可以使用不推荐使用的正则表达式,因为它不使用任何索引,并且会对集合执行完全扫描。

ElasticSearch是一个用于字符串搜索的更优化的数据库。

或者您可以使用Algolia https://www.algolia.com/