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']);
}
}
);