MongoDB 图集搜索:按 "searchScore" 排序
MongoDB Atlas search: sort by "searchScore"
我运行以下聚合管道并且运行良好:
[
{
$search: {
text: {
query: text,
path: 'name',
fuzzy: {
maxEdits: 2,
prefixLength: 0,
maxExpansions: 256,
},
},
},
},
{
$limit: 10,
},
{
$project: {
_id: 1,
name: 1,
score: { $meta: 'searchScore' },
},
},
]
我可以看到分数字段出现在我的结果中并且是正确的。现在我想对 $meta
-属性 searchScore
检索到的文档进行排序。但是,在管道的末尾添加此步骤:
{
$sort: { score: { $meta: 'searchScore' }, _id: 1 },
}
产生以下错误:
MongoError: $meta sort by 'searchScore' metadata is not supported
如何实现?
您需要在排序前添加一个包含 $meta
结果的新字段(您已经这样做了),然后对该字段进行排序,因此您的新管道将是:
...
{
$project: {
_id: 1,
name: 1,
score: { $meta: 'searchScore' }, // you are already adding the field here.
},
},
{
$sort: {
score: -1, // use the new computed field here.
_id: 1
}
}
我运行以下聚合管道并且运行良好:
[
{
$search: {
text: {
query: text,
path: 'name',
fuzzy: {
maxEdits: 2,
prefixLength: 0,
maxExpansions: 256,
},
},
},
},
{
$limit: 10,
},
{
$project: {
_id: 1,
name: 1,
score: { $meta: 'searchScore' },
},
},
]
我可以看到分数字段出现在我的结果中并且是正确的。现在我想对 $meta
-属性 searchScore
检索到的文档进行排序。但是,在管道的末尾添加此步骤:
{
$sort: { score: { $meta: 'searchScore' }, _id: 1 },
}
产生以下错误:
MongoError: $meta sort by 'searchScore' metadata is not supported
如何实现?
您需要在排序前添加一个包含 $meta
结果的新字段(您已经这样做了),然后对该字段进行排序,因此您的新管道将是:
...
{
$project: {
_id: 1,
name: 1,
score: { $meta: 'searchScore' }, // you are already adding the field here.
},
},
{
$sort: {
score: -1, // use the new computed field here.
_id: 1
}
}