【问题标题】:Show results with zero textScore Mongoose $text search显示 textScore 为零的结果 Mongoose $text search
【发布时间】:2017-04-26 07:31:35
【问题描述】:
recipe.find({
    $text: {
        $search: req.query.search,
        $diacriticSensitive: true
    }
}, {
    score: {
        $meta: "textScore"
    }
}
,function(err, data) { });

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

【问题讨论】:

    标签: mongodb search text mongoose


    【解决方案1】:

    您可以通过在文本搜索和始终返回 true 的语句上执行“OR”来返回“recipe”中的所有文档,甚至是不匹配的文档。不匹配的结果将获得 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']);
            }
        }
    );
    

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多