用零textscore mongoose $ text搜索显示结果


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

我正在使用猫鼬文本搜索功能根据其分数对结果进行排序。我还需要将非匹配记录列出到列表的底部。我可以实现这个吗?有什么方法可以显示零分数的重新编码?

您可以通过在文本搜索和始终返回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']);
        }
    }
);

最新更新