クエリプランと実行統計の取得
Atlas Search クエリは、クエリがexplain
メソッドで実行された場合、 $search
クエリプランと実行統計に関する情報を返します。 explain
を使用してクエリを実行すると、Atlas Search はクエリがどのように実行されたかに関する情報を含む BSONドキュメントを返します。
構文
db.<myCollection>.explain("<verbosity>").aggregate([ { $search: { "<operator>": { "<operator-options>" } } } ])
冗長
冗長モードは、 explain
の動作と返される情報の量を制御します。 値は次のいずれかになります。
queryPlanner (デフォルト) | クエリプランに関する情報。 クエリの実行統計を含む stats フィールドは含まれません。 |
クエリの実行統計が含まれる stats フィールドを含むクエリプランに関する情報。 | |
クエリの実行統計が含まれる stats フィールドを含むクエリプランに関する情報。 |
応答を説明する
explain
応答は、クエリの実行統計を説明するキーと値を含むBSONドキュメントです。 結果セット内のexplain
ドキュメントには、次のフィールドが含まれています。
オプション | タイプ | 必要性 | 目的 |
---|---|---|---|
path | string | 任意 | 演算子へのパス(ルートでない場合のみ)。 |
type | string | 必須 | Atlas Search 演算子が作成した Lucene クエリの名前。 詳細については、「 Lucene クエリ構造の概要」を参照してください。 |
analyzer | string | 任意 | クエリで使用される Atlas Searchアナライザ。 |
args | ドキュメント | 必須 | Lucene クエリ情報。 詳細については、「 Lucene クエリ構造の概要」を参照してください。 |
stats | ドキュメント | 任意 |
制限
explain
を使用してファセットクエリを実行することはできません。
例
次の例えでは、sample_mflix
データベースの movies
コレクションを使用します。
Tip
サンプル データセットをすでに読み込んでいる場合は、「Atlas Search スタートガイド」チュートリアルに従って、インデックスの定義を作成し、Atlas Search クエリを実行します。
queryPlanner
次の例では、テキスト演算子を使用して、 queryPlanner
の冗長モードでtitle
フィールドをクエリします。
db.movies.explain("queryPlanner").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
クエリは、次の結果を返します。 explain
応答要素の詳細については、「応答の説明 」を参照してください。
{ "stages" : [ { "$_internalSearchMongotRemote" : { "mongotQuery" : { "text" : { "path" : "title", "query" : "yark", "fuzzy" : { "maxEdits" : 1, "maxExpansions" : 100 } } }, "explain" : { "type" : "BooleanQuery", "args" : { "must" : [ ], "mustNot" : [ ], "should" : [ { "type" : "BoostQuery", "args" : { "query" : { "type" : "TermQuery", "args" : { "path" : "title", "value" : "ark" } }, "boost" : 0.6666666269302368 } }, { "type" : "BoostQuery", "args" : { "query" : { "type" : "TermQuery", "args" : { "path" : "title", "value" : "yard" } }, "boost" : 0.75 } }, { "type" : "BoostQuery", "args" : { "query" : { "type" : "TermQuery", "args" : { "path" : "title", "value" : "mark" } }, "boost" : 0.75 } }, { "type" : "BoostQuery", "args" : { "query" : { "type" : "TermQuery", "args" : { "path" : "title", "value" : "park" } }, "boost" : 0.75 } }, { "type" : "BoostQuery", "args" : { "query" : { "type" : "TermQuery", "args" : { "path" : "title", "value" : "dark" } }, "boost" : 0.75 } }, { "type" : "BoostQuery", "args" : { "query" : { "type" : "TermQuery", "args" : { "path" : "title", "value" : "york" } }, "boost" : 0.75 } } ], "filter" : [ ], "minimumShouldMatch" : 0 } } } }, { "$_internalSearchIdLookup" : { } } ], "serverInfo" : { "host" : "atlas-example-shard-00-01.mongodb.net", "port" : 27017, "version" : "4.4.3", "gitVersion" : "913d6b62acfbb344dde1b116f4161360acd8fd13" }, "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1612457287, 1), "signature" : { "hash" : BinData(0,"kzn7hY7NOduVIqcfx+40ENKbMKQ="), "keyId" : NumberLong("1234567890123456789") } }, "operationTime" : Timestamp(1612457287, 1) }
パイプラインで$limit
ステージを指定するクエリの場合、 explain
の結果にはmongotDocsRequested
メトリクスが含まれます。これは、 mongod
がmongot
からリクエストしたドキュメントの数を示します。
例
{ "mongotQuery": {}, "explain": {}, "limit": <int>, "sortSpec": {}, "mongotDocsRequested": <int>, }
executionStats
次の例では、オートコンプリート演算子を使用して、 executionStats
の冗長モードでtitle
フィールドをクエリします。
db.movies.explain("executionStats").aggregate([ { "$search": { "autocomplete": { "path": "title", "query": "pre", "fuzzy": { "maxEdits": 1, "prefixLength": 1, "maxExpansions": 256 } } } } ])
クエリは、次の結果を返します。 explain
応答要素の詳細については、「応答の説明 」を参照してください。
{ "stages" : [ { "$_internalSearchMongotRemote" : { "mongotQuery" : { "autocomplete" : { "path" : "title", "query" : "pre", "fuzzy" : { "maxEdits" : 1, "prefixLength" : 1, "maxExpansions" : 256 } } }, "explain" : { "type" : "MultiTermQueryConstantScoreWrapper", "args" : { "queries" : [ { "type" : "DefaultQuery", "args" : { "queryType" : "AutomatonQuery" }, "stats" : { "context" : { "millisElapsed" : NumberDouble(0) }, "match" : { "millisElapsed" : NumberDouble(0) }, "score" : { "millisElapsed" : NumberDouble(0) } } } ] }, "stats" : { "context" : { "millisElapsed" : NumberDouble(0.816418), "invocationCounts" : { "createWeight" : NumberLong(1), "createScorer" : NumberLong(2) } }, "match" : { "millisElapsed" : NumberDouble(3.849778), "invocationCounts" : { "nextDoc" : NumberLong(656) } }, "score" : { "millisElapsed" : NumberDouble(0.035349), "invocationCounts" : { "score" : NumberLong(655) } } } } }, "nReturned" : NumberLong(0), "executionTimeMillisEstimate" : NumberLong(20) }, { "$_internalSearchIdLookup" : { }, "nReturned" : NumberLong(0), "executionTimeMillisEstimate" : NumberLong(20) } ], "serverInfo" : { "host" : "atlas-example-shard-00-01.mongodb.net", "port" : 27017, "version" : "4.4.3", "gitVersion" : "913d6b62acfbb344dde1b116f4161360acd8fd13" }, "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1612454116, 1), "signature" : { "hash" : BinData(0,"OY+SMPmdK//g6rFZkvSCQr3c3hM="), "keyId" : NumberLong("1234567890123456789") } }, "operationTime" : Timestamp(1612454116, 1) }