对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

如何检索查询计划和执行统计信息

在使用 explain 方法运行查询时,MongoDB Search 查询返回有关 $search 查询计划和执行统计信息的信息。在使用 explain 运行查询时,MongoDB Search 返回 BSON 文档,其中包含统计信息和元数据,描述查询在 Lucene 内部的运行方式。

提示

在 Playground 中可视化查询计划

使用MongoDB Search Playground生成和查看 explain 计划摘要。

db.<myCollection>.explain("<verbosity>").aggregate([
{
$search: {
"<operator>": {
"<operator-options>"
}
}
}
])

详细模式控制 explain 的行为和返回的信息量。值可以是以下之一,按详细程度降序排列:

有关查询计划的信息,包括 stats 字段,其中包含查询的执行统计信息。包括在计划选择期间捕获的部分执行数据。

有关查询计划的信息,包括 stats 字段,其中包含查询的执行统计信息。

queryPlanner(默认)

有关查询计划的信息。不包括 stats 字段,其中包含查询的执行统计信息。

使用 explain 方法的查询返回 stages.$_internalSearchMongotRemote 对象中的以下字段:

选项
类型
用途

mongotQuery

文档

包含您运行的查询。

explain

文档

包含 explain 个结果。要了解更多信息,请参阅解释结果。

internalMongotBatchSizeHistory

整数数组

包含 mongot 返回到 mongod 的每批处理文档大小。

explain 方法返回一个 BSON 文档,其中包含 explain 文档中的以下字段。

选项
类型
必要性
用途

collectors

文档

Optional

描述收集器的执行统计信息。如果 indexPartitionExplain 存在,它将嵌套在每个 indexPartitionExplain 中,而不是在顶层。

highlight

文档

Optional

关于突出显示查询执行的详细信息。仅当您在查询中指定突出显示时,才会返回此值。

indexPartitionExplain

文档数组

Optional

包含每个索引分区的详细信息。仅当您配置了两个或多个索引分区时,才会返回此信息。

metadata

文档

Optional

包含有用的元数据。

query

文档

Optional

描述查询的执行统计信息。该值不予退回。如果 indexPartitionExplain 存在,它将嵌套在每个 indexPartitionExplain 中,而不是在顶层。

resultMaterialization

文档

Optional

有关在查询执行后从 Lucene 检索每个文档数据的详细信息。对于 queryPlanner 详细模式,不会返回此值。

resourceUsage

文档

Optional

详细说明执行查询时的资源使用情况。对于 queryPlanner 详细模式,不会返回此值。

collectors BSON 文档包含以下字段:

字段
类型
必要性
用途

allCollectorStats

文档

必需

查询的所有收集器的统计信息。报告的统计信息表示查询中使用的所有收集器的最大值或所有子收集器的统计信息总和。计时统计信息相加求和,以反映整个查询中所有收集器所花费的总时间。要学习;了解详情,请参阅allCollectorStats。

facet

文档

Optional

指定分面(Facet)的查询的明细信息。要了解更多信息,请参阅 facet。

sort

文档

Optional

指定排序的查询明细信息。要了解更多信息,请参阅 sort。

allCollectorStats BSON 文档描述了查询中指定的所有收集器的统计信息,包括 facet 和 sort。它包含以下键:

字段
说明

collect

追踪收集器收集的结果数量和持续时间。

competitiveIterator

统计信息跟踪从收集器请求 competitiveIterator 的总持续时间和次数。

setScorer

统计信息跟踪在收集器上设置记分器的总持续时间和次数。

facet 是一个 BSON 文档,当您在查询中指定分面时,该文档会详细说明查询和执行统计信息。它包含以下字段:

选项
类型
必要性
用途

collectorStats

文档

Optional

仅显示 facet 收集器的统计信息。这里的密钥与 allCollectorStats 是相同的。如果您在查询中使用了 sort,您可以评估它与 allCollectorStats 之间的差异,以确定 sort 收集器执行统计信息。

createCountsStats

文档

Optional

显示与创建内部 Lucene 对象相关的统计信息,该对象包含所有分面分组。它包含 generateFacetCounts 字段,该字段返回统计信息,跟踪 mongot 生成 Lucene 对象的总持续时间和次数,该对象包含所有分面及其计数。

stringFacetFieldCardinalities

文档

必需

对于与查询匹配的文档和整个 Lucene 索引,将分面字段映射到其关联基数。它为每个字段提供以下关联基数信息:

  • queried - 表示跨所有查询文档的字段的分面关联基数。

  • total - 表示跨索引中所有文档的字段的分面关联基数。

sort 是一个 BSON 文档,详细说明了在查询中指定 排序 时的查询和执行统计信息。它包含以下字段:

选项
类型
必要性
用途

stats

文档

Optional

追踪与sort执行相关的统计信息,涵盖所有排序字段。它包含以下字段:

  • comparator - 显示有关 Lucene 如何排序结果的统计信息和元数据。

    • setBottom — 返回将当前竞争性最低的排序值更新为更具竞争性的新值的频率。排序时, MongoDB Search 会追踪谷值,如果新值在相关性或竞争力方面超过当前谷值,则该指标会递增。

    • compareBottom - 返回与将当前 bottom 值与候选 bottom 值进行比较相关的计时和调用统计信息。

    • compareTop - 返回与将当前 top 值与候选 top 值进行比较相关的计时和调用统计信息。

    • setHitsThresholdReached - 返回与何时达到最大结果数(limit)相关的计时和调用统计信息。

    • competitiveIterator - 返回与(仅)迭代可能在排序结果中竞争顶部位置的文档相关的计时和调用统计信息。

    • setScorer - 返回与计算文档分数和相关性相关的计时和调用统计信息。

  • prunedResultIterator - 显示 Lucene 的 competitiveIterator 上 nextDoc 和 advance 方法调用的调用和计时统计信息。

    如果执行混合数据类型排序,输出中不会出现此内容。

    它仅包含 nextDoc 字段。

fieldInfos

文档

必需

将正在排序的字段映射到该字段索引中的数据类型列表。

usesIndexSort

布尔

Optional

指示查询是否可以从索引排序中受益。当查询的排序字段与索引排序匹配或形成其前缀时,查询受益。如果值为:

  • true,该查询可以使用排序索引优化。

  • false, 查询无法从排序索引优化中获益。

如果查询未指定排序,或索引没有排序规范,则输出中不存在此内容。

highlight是一个BSON文档,当您在查询中指定突出显示时,它详细说明了查询和执行统计信息。它包含以下字段:

选项
类型
必要性
用途

resolvedHighlightPaths

列表<String>

必需

所有高亮字段的列表。如果您在查询的 highlight 部分指定了通配符路径,则会包含一个完全解析的文档路径列表。

stats

QueryExecutionArea

Optional

与设置和执行突出显示相关的调用和计时统计信息。它包含以下字段:

  • setupHighlight - 设置 executeHighlight 阶段使用的内部 Lucene 对象所花费的时间。

  • executeHighlight - 运行高亮显示匹配文档所需的时间。

indexPartitionExplain 包含每个索引分区的解释结果。顶层 collectors 和 query 位于每个索引分区的 explain 信息中,而不在顶层。

metadata 包含有用的元数据,例如:

字段
类型
必要性
用途

mongotVersion

字符串

Optional

mongot 的当前版本。

mongotHostName

字符串

Optional

用于标识 mongot 主机的人类可读标签。

indexName

字符串

Optional

查询中使用的MongoDB Search索引。

cursorOptions

文档

Optional

为 mongot 提供的游标选项。

totalLuceneDocs

整型

Optional

索引中包括已删除文档的索引对象总数。

query BSON 文档描述了查询的执行统计信息。它包含以下字段:

字段
类型
必要性
用途

path

字符串

Optional

操作符的路径,前提是它不是根目录。

type

字符串

必需

MongoDB Search操作符创建的Lucene查询的名称。有关更多信息,请参阅 query。

analyzer

字符串

Optional

与查询一起使用的MongoDB Search分析器。

args

文档

必需

Lucene 查询信息。有关更多信息,请参阅 query。

stats

文档

Optional

如果 explain 以 executionStats 或 allPlansExecution 的详细程度运行,则为查询 stats。

搜索命令的解释响应包含有关使用该命令执行的查询的信息。args字段中的响应包括MongoDB Search 为满足 $search查询而执行的Lucene查询的结构化详细信息。

本节包含:

  • MongoDB Search 操作符创建的一些Lucene查询

  • 结构化摘要中包含的 Lucene 查询选项

  • 每个 Lucene 查询类型的 Lucene 查询结构化摘要示例

注意

关于示例

本节中的示例基于对具有 详细程度模式 的 示例数据集queryPlanner 运行的查询。在示例响应中:

  • mongotQuery 字段显示MongoDB Search操作符和运行的查询。

  • explain.type 字段显示操作符创建的 Lucene 查询。

有关完整示例,请参阅示例。

BooleanQuery

对于 Lucene BooleanQuery,结构化摘要包含有关以下选项的详细信息:

字段
类型
必要性
说明

must

Optional

必须匹配的条款。

mustNot

Optional

不得匹配的子句。

should

Optional

应匹配的子句。

filter

Optional

必须全部匹配的子句。

minimumShouldMatch

整型

Optional

必须匹配的最小 should 子句数量。

以下示例显示了针对 sample_airbnb.listingsAndReviews 集合运行的查询的 explain 响应。

1{
2 "stages" : [
3 {
4 "$_internalSearchMongotRemote" : {
5 "mongotQuery" : {
6 "compound" : {
7 "must" : [ {
8 "compound" : {
9 "should" : [ {
10 "text" : {
11 "query" : "historic",
12 "path" : "summary"
13 }
14 },
15 {
16 "text" : {
17 "query" : "Portugal",
18 "path" : "address.country"
19 }
20 },
21 {
22 "text" : {
23 "query" : "railway",
24 "path" : "transit"
25 }
26 } ]
27 }
28 } ],
29 "mustNot" : [ {
30 "text" : {
31 "query" : "Apartment",
32 "path" : "property_type"
33 }
34 } ]
35 }
36 },
37 "explain" : {
38 "type" : "BooleanQuery",
39 "args" : {
40 "must" : [ {
41 "path" : "compound.must",
42 "type" : "BooleanQuery",
43 "args" : {
44 "must" : [ ],
45 "mustNot" : [ ],
46 "should" : [
47 {
48 "path" : "compound.must.compound.should[0]",
49 "type" : "TermQuery",
50 "args" : {
51 "path" : "summary",
52 "value" : "historic"
53 }
54 },
55 {
56 "path" : "compound.must.compound.should[1]",
57 "type" : "TermQuery",
58 "args" : {
59 "path" : "address.country",
60 "value" : "portugal"
61 }
62 },
63 {
64 "path" : "compound.must.compound.should[2]",
65 "type" : "TermQuery",
66 "args" : {
67 "path" : "transit",
68 "value" : "railway"
69 }
70 }
71 ],
72 "filter" : [ ],
73 "minimumShouldMatch" : 0
74 }
75 } ],
76 "mustNot" : [ {
77 "path" : "compound.mustNot",
78 "type" : "TermQuery",
79 "args" : {
80 "path" : "property_type",
81 "value" : "apartment"
82 }
83 } ],
84 "should" : [ ],
85 "filter" : [ ],
86 "minimumShouldMatch" : 0
87 }
88 }
89 },
90 ...
91 },
92 ...
93 ],
94 ...
95}
ConstantScoreQuery

对于恒定得分查询,结构化摘要包括以下选项的详细信息:

字段
类型
必要性
说明

query

必需

ConstantScoreQuery 的子项。

FunctionScoreQuery

对于 Lucene FunctionScoreQuery 查询,结构化摘要包含有关以下选项的详细信息:

字段
类型
必要性
说明

scoreFunction

字符串

必需

查询中使用的评分表达式。

query

必需

查询。

LatLonPointDistanceQuery

对于 Lucene LatLonPointDistanceQuery 查询,响应只包含一个stats。

LatLonShapeQuery

对于 Lucene LatLonShapeQuery 查询,响应只包含一个stats。

LongDistanceFeatureQuery

对于 Lucene LongDistanceFeatureQuery,响应仅包含一个stats。

MultiTermQueryConstantScoreWrapper

对于 Lucene MultiTermQueryConstantScoreWrapper 查询,结构化摘要包含有关以下参数的详细信息:

字段
类型
必要性
说明

queries

必需

查询列表。

PhraseQuery

对于 Lucene PhraseQuery 查询,结构化摘要包含有关以下参数的详细信息:

字段
类型
必要性
说明

path

字符串

必需

要搜索的索引字段。

query

字符串

必需

要搜索的一个或多个字符串。

slop

数值

必需

query 短语中单词之间允许的距离。

PointRangeQuery

对于 Lucene PointRangeQuery 查询,结构化摘要包含有关以下参数的详细信息:

字段
类型
必要性
说明

path

字符串

必需

要搜索的索引字段。

representation

字符串

Optional

数字表示形式。对日期类型数据的查询不包括表示形式。

gte

数值

Optional

查询的下限。

lte

数值

Optional

查询的上限。

TermQuery

对于术语查询,结构化摘要包括有关以下参数的详细信息:

字段
类型
必要性
说明

path

字符串

必需

要搜索的索引字段。

value

字符串

必需

要搜索的字符串。

Default

未由其他 Lucene 查询显式定义的 Lucene 查询将使用默认查询进行序列化。结构化摘要包含有关以下选项的详细信息:

字段
类型
必要性
说明

queryType

字符串

必需。

Lucene 查询的类型。

executionStats 和 allPlansExecution 详细模式的explain 响应包含一个stats 字段,该字段包含有关查询在 查询执行的各个阶段所 花费的 时间 的信息。

时间细分描述了与查询执行区域相关的执行统计信息。以下字段显示时间细分:

字段
类型
说明

millisElapsed

Long

在该区域执行任务所用的大约时间,包括查询子级在此区域所用的时间。该值是在该区域中执行任务时经过的近似毫秒数。

invocationCounts

文档

调用此区域中包含的任务的次数。 该值是任务名称到其调用计数的映射。

统计信息可用于以下查询领域:

选项
说明

context

与 Lucene 查询执行相关的统计信息。 此区域中枚举了两个任务的调用计数:

  • createScorer: Scorer 遍历文档并为每个文档生成一个分数。调用 createScorer 会创建负责评分的对象。请注意,与此任务相关的时间并非实际用于对文档进行评分的时间。计数包括 scorerSupplier 调用的次数。

  • createWeight: Weight 存储与查询和 IndexSearcher 相关的省/市/自治区。计数包含 createWeight 次调用的数量。

此区域花费的时间与查询的结构有关,而不是基于迭代和评分的结果数量。

例如:

"context" : {
"millisElapsed" : NumberDouble(4.934751),
"invocationCounts" : {
"createWeight" : NumberLong(1),
"createScorer" : NumberLong(10)
}
}

match

与遍历和匹配结果文档相关的统计信息。 此统计信息显示确定下一个匹配的文档所需的时间。 根据查询的性质,匹配结果所花费的时间可能会有很大差异。 此区域中枚举了两个任务的调用计数:

  • nextDoc:用于推进到结果集中的下一个文档的请求。这涉及识别并跳过跳过项,或执行查找下一个匹配项所需的其他任务。计数包括 nextDoc 和 advance 调用次数。

  • refineRoughMatch:执行更彻底的匹配。某些查询以两阶段过程执行,其中文档首先被“粗略”匹配,并且仅在满足第一次粗略匹配后才通过第二个更彻底的阶段进行检查。refineRoughMatch 任务是两阶段过程的第二阶段。计数包括 refineRoughMatch 调用的次数。

例如:

"match" : {
"millisElapsed" : NumberDouble(4.901597),
"invocationCounts" : {
"nextDoc" : NumberLong(541),
"refineRoughMatch" : NumberLong(0)
}
}

score

与结果集中的文档评分相关的统计信息。 此区域中枚举了两个任务的调用计数:

  • score: 对结果集中的每个文档进行评分。计数包括 score 次调用的数量。

  • setMinCompetitiveScore:忽略分数低于给定值的文档。表示查询可能通过忽略分数低于某些非竞争性阈值的文档,减少了执行的评分操作数量。计数包括 setMinCompetitiveScore 次调用的数量。

例如:

"score" : {
"millisElapsed" : NumberDouble(3.931312),
"invocationCounts" : {
"score" : NumberLong(536),
"setMinCompetitiveScore" : NumberLong(0)
}
}

resultMaterialization 文档显示 mongot 完成以下任务所需的时间:

  1. 检索以 _id 或 storedSource 形式存储在 Lucene 中的结果数据。

  2. 将数据序列化为 BSON 格式,然后发送到 mongod。

要了解更多信息,请参阅 stats。

resourceUsage 文档显示了用于运行查询的资源。它包含以下字段:

字段
类型
必要性
用途

majorFaults

Long

必需

主要页面错误的数量,当系统在查询执行期间无法在内存中找到所需数据,导致从磁盘等后备存储中读取数据时,就会发生这种错误。

minorFaults

Long

必需

次要页面错误的数量,当数据在页面缓存中,但尚未映射到进程的页表时发生。

userTimeMs

Long

必需

在用户空间中花费的 CPU 时间,以毫秒为单位。

systemTimeMs

Long

必需

在系统空间中花费的 CPU 时间,以毫秒为单位。

maxReportingThreads

整型

必需

在所有批处理中执行查询期间,mongot 使用的最大线程数。对于非并发解释查询,值为 1。

numBatches

整型

必需

处理查询时请求 mongot 的批处理总数。

以下示例使用 sample_mflix 数据库中的 movies 集合。

提示

如果您已经加载了 示例数据集,请参阅 MongoDB Search 快速入门教程以创建 索引定义并运行 MongoDB Search 查询。

以下示例使用不同的操作符以 allPlansExecution 详细模式查询 title 字段。

db.movies.explain("allPlansExecution").aggregate([
{
$search: {
"text": {
"path": "title",
"query": "yark",
"fuzzy": {
"maxEdits": 1,
"maxExpansions": 100,
}
}
}
}
])

以下示例使用不同的操作符以 queryPlanner 详细模式查询 title 字段。

db.movies.explain("queryPlanner").aggregate([
{
$search: {
"text": {
"path": "title",
"query": "yark",
"fuzzy": {
"maxEdits": 1,
"maxExpansions": 100,
}
}
}
}
])

对于在管道中指定$limit阶段的查询, explain结果包括mongotDocsRequested指标,该指标显示mongod从mongot请求的文档数。

例子

{
"mongotQuery": {},
"explain": {},
"limit": <int>,
"sortSpec": {},
"mongotDocsRequested": <int>,
}

以下示例使用 autocomplete 以 executionStats 详细程度模式查询 title 字段。

1db.movies.explain("executionStats").aggregate([
2 {
3 "$search": {
4 "autocomplete": {
5 "path": "title",
6 "query": "pre",
7 "fuzzy": {
8 "maxEdits": 1,
9 "prefixLength": 1,
10 "maxExpansions": 256
11 }
12 }
13 }
14 }
15])

要了解有关 explain 响应元素的更多信息,请参阅解释结果。