AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

クエリプランと実行統計を検索する方法

MongoDB Search クエリは、explain メソッドを有効にしてクエリを実行すると、$search クエリプランと実行統計に関する情報を返します。explain でクエリを実行すると、MongoDB Search は統計情報と、クエリが Lucene 内部でどのように実行されたかを示すメタデータを含む BSON ドキュメントを返します。

Tip

プレイグラウンドでのクエリプランの視覚化

MongoDB Search Playground を使用して、explain プランのサマリーを生成および表示できます。

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

冗長モードは、explain の動作と返される情報の量を制御します。値は、冗長を減らすために、次のいずれかになります。

クエリの実行統計を含む stats フィールドを含むクエリプランに関する情報プラン選択 中にキャプチャされた部分的な実行データが含まれます。

クエリの実行統計情報をもつ stats フィールドを含む、クエリプランに関する情報です。

queryPlanner (デフォルト)

クエリプランに関する情報。stats フィールドは、クエリの実行統計をもつため、含まれていません。

explain メソッドによるクエリは、stages.$_internalSearchMongotRemote オブジェクトの以下のフィールドを返します。

オプション
タイプ
目的

mongotQuery

ドキュメント

実行したクエリが含まれます。

explain

ドキュメント

Contains the explain results. To learn more, see Explain Results.

internalMongotBatchSizeHistory

整数の配列

mongot が mongod に返した各バッチのドキュメントのサイズが含まれます。

explainメソッドは、explain ドキュメント内の次のフィールドを含む BSON ドキュメントを返します。

オプション
タイプ
必要性
目的

collectors

ドキュメント

任意

コレクターの実行統計を説明します。indexPartitionExplainが存在する場合、これはトップレベルではなく、各indexPartitionExplainの中にネストされます。

highlight

ドキュメント

任意

クエリのハイライト実行に関する詳細情報。これは、クエリでハイライトを指定した場合にのみ返されます。

indexPartitionExplain

ドキュメントの配列

任意

インデックスごとのパーティションの詳細が含まれています。これは2つ以上のインデックス パーティションを設定した場合にのみ返されます。

metadata

ドキュメント

任意

有用なメタデータを含んでいます。

query

ドキュメント

任意

クエリの実行統計を説明します。これは返されません。indexPartitionExplainが存在する場合、これはトップレベルではなく、各indexPartitionExplainの中にネストされます。

resultMaterialization

ドキュメント

任意

クエリ実行後に Lucene からドキュメントごとのデータを取得するための詳細。queryPlanner の冗長モードでは返されません。

resourceUsage

ドキュメント

任意

クエリが実行されたときのリソース使用状況を詳述します。queryPlannerの冗長モードでは返されません。

collectors BSON ドキュメントには、次のフィールドが含まれています。

フィールド
タイプ
必要性
目的

allCollectorStats

ドキュメント

必須

Statistics of all collectors of the query. Statistics reported represent either the maximum value across all collectors used in the query or a sum of the statistic across all the sub-collectors. The timing statistics are summed to reflect the total time spent across all collectors for the entire query. To learn more, see allCollectorStats.

facet

ドキュメント

任意

Breakdown of the query that specifies facet. To learn more, see facet.

sort

ドキュメント

任意

Breakdown of the query that specifies sort. To learn more, see sort.

allCollectorStatsBSON ドキュメントには、クエリで指定されたすべてのコレクターの統計が記載されており、facetやsortが含まれます。これには、次のキーが含まれています。

フィールド
説明

collect

コレクターが収集した期間と結果の数を追跡します。

competitiveIterator

コレクターから competitiveIterator が要求された合計時間と回数を追跡する統計。

setScorer

スコアラーがコレクターに設定された合計時間と回数を追跡する統計。

facet は、BSON ドキュメントであり、クエリにファセットを指定した場合のクエリおよび実行統計を詳細に示します。次のフィールドが含まれています。

オプション
タイプ
必要性
目的

collectorStats

ドキュメント

任意

facet コレクターの統計のみを表示します。ここにあるキーは allCollectorStats と同一です。クエリで sort を使用した場合は、これと allCollectorStats との差を評価して、sort コレクターの実行統計を判定できます。

createCountsStats

ドキュメント

任意

すべてのファセット グループを保持する内部の Lucene オブジェクトの作成に関連する統計を表示します。generateFacetCounts フィールドが含まれており、mongot がすべてのファセットとそのカウントを保持する Lucene オブジェクトを生成する合計期間と回数を追跡する統計を返します。

stringFacetFieldCardinalities

ドキュメント

必須

クエリに一致したドキュメントと Lucene インデックス全体の両方に対して、ファセット対象のフィールドをその濃度にマッピングします。これにより、各フィールドについて次の濃度情報が提供されます。

  • queried - クエリされたすべてのドキュメントにわたるフィールドのファセット濃度を表します。

  • total - インデックス内のすべてのドキュメントにわたるフィールドのファセット濃度を表します。

sort は、クエリでソートを指定したときに、クエリと実行統計を詳細に示す BSON ドキュメントです。次のフィールドが含まれています。

オプション
タイプ
必要性
目的

stats

ドキュメント

任意

すべてのソート フィールドにわたる sort の実行に関連する統計を追跡します。次のフィールドが含まれています。

  • comparator - Lucene が結果をソートする方法に関する統計およびメタデータを表示します。

    • setBottom - 現在競合が最も少ないソート値が、新しい競合値でアップデートされる頻度を返します。ソート時に、 MongoDB Search は下限値を追跡します。新しい値が関連性または競合性において現在の下限値を超えると、このメトリクスは増加します。

    • compareBottom - 現在の bottom 値と候補の bottom 値を比較する際のタイミングおよび呼び出しに関する統計を返します。

    • compareTop - 現在の top 値と候補の top 値を比較する際のタイミングおよび呼び出しに関する統計を返します。

    • setHitsThresholdReached - 最大結果数(limit)に達した際のタイミングと呼び出しに関する統計を返します。

    • competitiveIterator - ソートされた結果の上位を争う可能性が高いドキュメント(のみ)を反復処理する際のタイミングと呼び出しに関する統計を返します。

    • setScorer - ドキュメントのスコアと関連性の計算に関するタイミングおよび呼び出しの統計を返します。

  • prunedResultIterator - Lucene のcompetitiveIteratorにおけるnextDocおよびadvanceメソッド呼び出しの回数とタイミングの統計を表示します。

    混合データ型のソートを実行する場合、これは出力に表示されません。

    nextDocフィールドのみが含まれています。

fieldInfos

ドキュメント

必須

ソート対象のフィールドを、そのフィールドのインデックスに存在するデータ型のリストにマッピングします。

usesIndexSort

ブール値

任意

クエリがインデックスのソートの利点を受けられるかどうかを示します。クエリのソートフィールドがインデックスのソートと一致するか、またはその接頭を構成する場合、クエリは利点を受けられます。値が次の場合:

  • trueクエリは、ソートされたインデックスの最適化を使用できます。

  • falseクエリは、ソートされたインデックスの最適化のメリットが得られません。

クエリでソートが指定されていない場合、またはインデックスにソート仕様がない場合、これは出力には表示されません。

highlight は、クエリでハイライトを指定した場合に、クエリと実行の統計を詳細に示す BSON ドキュメントです。次のフィールドが含まれています。

オプション
タイプ
必要性
目的

resolvedHighlightPaths

List<String>

必須

ハイライトされたすべてのフィールドの一覧。クエリの highlight セクションでワイルドカード パスを指定した場合、完全に解決されたドキュメント パスのリストが含まれています。

stats

QueryExecutionArea

任意

ハイライトの設定および実行に関連する呼び出しとタイミングの統計。次のフィールドが含まれています。

  • setupHighlight - executeHighlight フェーズ中に使用される内部 Lucene オブジェクトのセットアップに要した時間。

  • executeHighlight - 一致するドキュメントに対してハイライトを実行するのに要した時間。

the indexPartitionExplain contains Explain Results for each index partition. The top-level collectors and query are inside the explain information of each index partition and absent at the top-level.

metadata には、次のような有用なメタデータが含まれています。

フィールド
タイプ
必要性
目的

mongotVersion

文字列

任意

mongotの現在のバージョンです。

mongotHostName

文字列

任意

mongot ホストを識別する、人間が判読できるラベル。

indexName

文字列

任意

クエリで使用されるMongoDB Searchインデックス。

cursorOptions

ドキュメント

任意

mongot に指定されたカーソル オプション。

totalLuceneDocs

整数

任意

削除されたドキュメントを含むインデックス内のインデックス オブジェクトの総数。

query BSON ドキュメントには、クエリの実行統計が記述されています。次のフィールドが含まれています。

フィールド
タイプ
必要性
目的

path

string

任意

演算子へのパス(ルートでない場合のみ)。

type

string

必須

MongoDB Search 演算子が作成した Lucene クエリの名前。詳しくは、 query を参照してください。

analyzer

string

任意

クエリで使用されるMongoDB Searchアナライザ。

args

ドキュメント

必須

Lucene クエリ情報。詳細については、queryをご覧ください。

stats

ドキュメント

任意

stats for the query if explain ran with executionStats or allPlansExecution verbosity.

The explain response of a search command contains information about the query executed with that command. The response in the args field includes structured details of what Lucene queries MongoDB Search executed to satisfy a $search query.

このセクションには、次の内容が含まれています。

  • MongoDB Search 演算子が作成する Lucene クエリの一部

  • 構造化サマリーに含まれる Lucene クエリ オプション

  • 各 Lucene クエリ タイプの Lucene クエリ構造の概要の例

注意

例について

The examples in this section are based on queries run against the sample datasets with the queryPlanner verbosity mode. In the example response, the:

  • mongotQuery フィールドには、 MongoDB Search 演算子と実行されたクエリが表示されます。

  • explain.type フィールドには、演算子が作成した Lucene クエリが表示されます。

完全な例については、「例」を参照してください。

BooleanQuery

Lucene BooleanQueryの場合、構造化されたサマリーには次のオプションに関する詳細が含まれます。

フィールド
タイプ
必要性
説明

must

任意

一致する必要がある句。

mustNot

任意

一致してはならない句。

should

任意

一致する必要がある句。

filter

任意

すべて一致する必要がある句。

minimumShouldMatch

整数

任意

一致する必要がある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

string

必須

クエリで使用される スコア式 。

query

必須

クエリ。

LatLonPointDistanceQuery

For Lucene LatLonPointDistanceQuery queries, the response contains an stats only.

LatLonShapeQuery

For Lucene LatLonShapeQuery queries, the response contains an stats only.

LongDistanceFeatureQuery

For Lucene LongDistanceFeatureQuery, the response contains an stats only.

MultiTermQueryConstantScoreWrapper

Lucene MultiTermQueryConstantScoreWrapperクエリの場合、構造化されたサマリーには次の引数に関する詳細が含まれます。

フィールド
タイプ
必要性
説明

queries

必須

クエリのリスト。

PhraseQuery

Lucene PhraseQueryクエリの場合、構造化されたサマリーには次の引数に関する詳細が含まれます。

フィールド
タイプ
必要性
説明

path

文字列

必須

検索するインデックス付きフィールド。

query

文字列

必須

検索する文字列または複数の文字列。

slop

番号

必須

queryフレーズ内の単語間の許容距離。

PointRangeQuery

Lucene PointRangeQueryクエリの場合、構造化されたサマリーには次の引数に関する詳細が含まれます。

フィールド
タイプ
必要性
説明

path

文字列

必須

検索するインデックス付きフィールド。

representation

文字列

任意

数値表現。 日付型データに対するクエリには表現は含まれません。

gte

番号

任意

クエリの下限。

lte

番号

任意

クエリの上限。

TermQuery

ターム クエリの場合、構造化されたサマリーには次の引数に関する詳細が含まれます。

フィールド
タイプ
必要性
説明

path

文字列

必須

検索するインデックス付きフィールド。

value

文字列

必須

検索する string。

Default

別の Lucene クエリによって明示的に定義されていない Lucene クエリは、デフォルトのクエリを使用して直列化されます。 構造化されたサマリーには、次のオプションの詳細が含まれます。

フィールド
タイプ
必要性
説明

queryType

文字列

必須。

Lucene クエリのタイプ。

The explain response for executionStats and allPlansExecution verbosity modes includes a stats field that contains information on how much time a query spends in various stages of query execution.

The timing breakdown describes execution statistics pertinent to an areas of query execution. The following fields show the timing breakdown:

フィールド
タイプ
説明

millisElapsed

Long

Approximate wall-clock time elapsed performing tasks in this area including the amount of time the children of the query spent in this area. The value is approximate number of milliseconds elapsed while performing tasks in this area.

invocationCounts

ドキュメント

Number of invocations of tasks included in this area. The value is a map of task names to their invocation count.

統計は、クエリの次の領域で利用できます。

オプション
説明

context

Lucene クエリの実行に関連する統計。 この領域には、呼び出し回数が列挙されるタスクが 2 つあります。

  • createScorer: Scorerはドキュメントを反復処理し、各ドキュメントのスコアを生成します。createScorerを呼び出すと、スコアリングを担当するオブジェクトが作成されます。このタスクに関連付けられた時間は、実際にドキュメントをスコアリングするために費やされた時間ではないことに注意してください。カウントには、scorerSupplierの呼び出し回数が含まれます。

  • createWeight: Weightは、クエリとIndexSearcherに関連付けられた状態を保存する。カウントには、createWeight の呼び出し回数が含まれます。

The time spent in this area is related to the structure of the query, and is not based on the number of results that are iterated through and scored.

以下に例を挙げます。

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

match

結果ドキュメントの反復処理と一致に関連する統計。 この統計は、どのドキュメントが次の一致であるかを決定するのにかかる時間を示しています。 結果のマッチングに費やされる時間は、クエリの性質によって大きく異なる場合があります。 この領域には、呼び出し回数が列挙されるタスクが 2 つあります。

  • nextDoc:結果セットの次のドキュメントに進むためのリクエスト。これには、スキップの特定とスキップを越えること、または次のマッチを見つけるために必要なその他のタスクが含まれます。カウントには、nextDocおよびadvanceの呼び出し数が含まれます。

  • refineRoughMatchより詳細な一致を実行します。一部のクエリは2段階のプロセスで実行されます。このプロセスでは、ドキュメントが最初に「大まかに」一致し、最初の大まかな一致を満たした後にのみ、2番目のより詳細なフェーズでチェックされます。refineRoughMatch タスクは、2フェーズプロセスの第2フェーズです。カウントには、refineRoughMatchの呼び出し回数が含まれます。

以下に例を挙げます。

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

score

結果セット内のドキュメントのスコアリングに関連する統計。 この領域には、呼び出し回数が列挙されるタスクが 2 つあります。

  • score結果セット内の各ドキュメントをスコアリングします。カウントには、score 回の呼び出し数が含まれます。

  • setMinCompetitiveScoreスコアが指定された値未満のドキュメントを無視します。クエリが、競争力のないしきい値を下回るスコアのドキュメントを無視することで、実行されるスコアリング操作の数を削減できた可能性があることを示します。カウントには setMinCompetitiveScore 回の呼び出し数が含まれます。

以下に例を挙げます。

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

resultMaterialization ドキュメントは、mongot が次の操作を実行するのにかかる時間を示しています。

  1. Lucene に保存されている結果データを _id または storedSource の形式で検索します。

  2. mongod に送信する前に、データを BSON 形式にシリアル化してください。

To learn more, see stats.

resourceUsage ドキュメントには、クエリの実行に使用されるリソースが表示されます。次のフィールドが含まれています。

フィールド
タイプ
必要性
目的

majorFaults

Long

必須

クエリ実行中にシステムがメモリ内で必要なデータを見つけられず、ディスクなどのバッキング ストアから読み込む場合に発生するメジャーなページ フォールトの数。

minorFaults

Long

必須

データがページキャッシュにあるが、まだプロセスのページテーブルにマップされていない場合に発生するマイナーページフォールトの数。

userTimeMs

Long

必須

ユーザー空間で費やされた CPU 時間(ミリ秒単位)。

systemTimeMs

Long

必須

システム空間で費やされた CPU 時間(ミリ秒単位)。

maxReportingThreads

整数

必須

すべてのバッチでのクエリ実行中にmongotが使用したスレッドの最大数。非並行のExplainクエリの場合、値は1です。

numBatches

整数

必須

クエリのプロセシング中に mongot が要求されたバッチの総数。

次の例えでは、sample_mflix データベースの movies コレクションを使用します。

Tip

If you've already loaded the sample dataset, refer to the MongoDB Search Quick Start tutorial to create an index definition and run MongoDB Search queries.

次の例では、さまざまな演算子を使用して、title フィールドを allPlansExecution 冗長モードでクエリします。

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

次の例では、さまざまな演算子を使用して、title フィールドを queryPlanner 冗長モードでクエリします。

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

For queries that specify a $limit stage in the pipeline, the explain results include the mongotDocsRequested metric, which shows the number of documents that mongod requested from mongot.

例

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

The following example uses the autocomplete to query the title field with the executionStats verbosity mode.

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 応答要素の詳細については、「Explain の結果」を参照してください。