我已经在我的集合上配置了搜索索引并实现了以下查询:
查询1:
db.productDimensions.explain().aggregate([{
$search: {
"text": {
"path": "name",
"query": "productName"
}
}
},
{$sort: { name: 1 }}
]);
查询2:
db.productDimensions.explain("executionStats").aggregate([{
"$search": {
"text": {
"path": "name",
"query": "productName"
},
"sort": {
unused: {$meta: "searchScore"},
"name": 1,
}
}
}]);
在使用
explain()
执行这些查询时,我发现 winningPlan
字段不存在。如何验证搜索索引是否正在被使用?我的理解是,winningPlan
通常表示索引是否被使用。如果这个假设不正确,我如何确定搜索索引是否确实被使用?
$search 是 Atlas 特定的聚合管道阶段。它不是核心 MongoDB 功能,而是与 ElasticSearch sidecar 的绑定。
如果 $seach 是管道中的第一阶段,Atlas 会将其转换为 ES 查询,检索数据并将其传递到下一个阶段。 它不是查询规划器的主题,因为 $search 索引不是本机 MongoDb 索引,并且只要 $search 阶段包含在管道中,该索引就会始终被使用。