在 MongoDB 中使用带有查询的“explain()”时缺少“winingPlan”

问题描述 投票:0回答:1

我已经在我的集合上配置了搜索索引并实现了以下查询:

查询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
通常表示索引是否被使用。如果这个假设不正确,我如何确定搜索索引是否确实被使用?

mongodb mongoose indexing mongodb-query
1个回答
0
投票

$search 是 Atlas 特定的聚合管道阶段。它不是核心 MongoDB 功能,而是与 ElasticSearch sidecar 的绑定。

如果 $seach 是管道中的第一阶段,Atlas 会将其转换为 ES 查询,检索数据并将其传递到下一个阶段。 它不是查询规划器的主题,因为 $search 索引不是本机 MongoDb 索引,并且只要 $search 阶段包含在管道中,该索引就会始终被使用。

© www.soinside.com 2019 - 2024. All rights reserved.