显示没有textScore Mongoose $ text搜索的结果

时间:2017-04-22 07:29:49

标签: mongodb search text mongoose

recipe.find({
    $text: {
        $search: req.query.search,
        $diacriticSensitive: true
    }
}, {
    score: {
        $meta: "textScore"
    }
}
,function(err, data) { });

我正在使用猫鼬文本搜索功能根据分数对结果进行排序。我还需要将不匹配的记录列在列表的底部。我可以做到这一点吗? 有没有办法显示零分的recods?

1 个答案:

答案 0 :(得分:1)

您可以通过' OR'返回来自' recipe'的所有文件,甚至是不匹配的文件。在文本搜索和始终返回true的语句上。不匹配的结果将得到0分。这样的副作用似乎是Mongo不想按文本分数排序(如果你尝试在mongo控制台上排序),但这应该不是问题在您的情况下,因为您可以轻松地在客户端排序(例如,使用lodash等)。示例代码(未测试):

recipe.find({
        $or: [{
            $text: {
                $search: req.query.search,
                $diacriticSensitive: true
            }
        }, {
            _id: {
                $exists: true
            }
        }]
    }, {
        score: {
            $meta: "textScore"
        }
    },
    function(err, data) {
        if (data) {
            data = _.map(data, function(d) {
                return d.toObject();
            });
            data = _.orderBy(data, ['score'], ['desc']);
        }
    }
);