使用$ text的mongo文本搜索无效

时间:2016-02-27 18:13:11

标签: mongodb text full-text-search

我正在尝试使用索引和$ text

进行mongo文本搜索

我的模型是

var authorSchema = new mongoose.Schema(
    {
        authorId : Number,
        Description : String,
        firstName : String
    });

authorSchema.index({ firstName: 'text'});

我正在使用名字

创建索引

当我按下图所示进行搜索时

router.route('/search')
    .get(function(req,res){
        Authors.find({ $text : { $search : req.params.search }},{"_id":0,"firstName":1},function(err,authors){
            res.send(authors);
        })
    })

搜索似乎没有提供预期的结果,即

我在集合中有两个文件,第一个名字是kumar和sam kumar *当我搜索kumar搜索时将获得这两个文件 *当我搜索sam kumar时,我将再次得到两个似乎不正确的文件,搜索只是sam kumar

我做错了什么

请说当我搜索整个名字搜索时,如何只返回单个文档

,我怎样才能完成搜索

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试查找短语,在您的情况下 sam kumar 并尝试查找包含完整短语的文档。

在这种情况下,用双引号(“)

包装你的短语

e.g。

var phrase = "\"" + req.params.search + "\"";

Authors.find({ $text : { $search : phrase }},{"_id":0,"firstName":1},function(err,authors){
        res.send(authors);

这应该会回报你的期望。

这里是说明如何搜索短语的文档。 请参阅https://docs.mongodb.org/manual/reference/operator/query/text/#phrases

以上snipes假设您正在搜索完整的短语 sam kumar 。但是,如果要匹配文档中任何位置存在 sam kumar 字样的所有文档,则需要计算文本分数并过滤分数为1的文档或更多。

请参阅https://docs.mongodb.org/manual/tutorial/text-search-in-aggregation/#match-on-text-score以供参考。