recipe.find({
$text: {
$search: req.query.search,
$diacriticSensitive: true
}
}, {
score: {
$meta: "textScore"
}
}
,function(err, data) { });
我正在使用猫鼬文本搜索功能根据分数对结果进行排序。我还需要将不匹配的记录列在列表的底部。我可以做到这一点吗? 有没有办法显示零分的recods?
答案 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']);
}
}
);