쿼리 계획 및 실행 통계 조회
Atlas Search 쿼리는 explain
메서드로 쿼리를 실행할 때 $search
쿼리 계획 및 실행 통계에 대한 정보를 반환합니다. explain
을(를) 사용하여 쿼리를 실행하면 Atlas Search는 쿼리가 실행된 방법에 대한 정보가 포함된 BSON 문서를 반환합니다.
구문
db.<myCollection>.explain("<verbosity>").aggregate([ { $search: { "<operator>": { "<operator-options>" } } } ])
상세
상세 모드에서는 explain
의 동작과 반환되는 정보의 양을 제어합니다. 값은 다음 중 하나일 수 있습니다.
queryPlanner(기본값) | 쿼리 계획에 대한 정보입니다. 쿼리에 대한 실행 통계가 포함된 stats 필드는 포함되지 않습니다. |
쿼리에 대한 실행 통계가 포함된 stats 필드를 포함한 쿼리 계획에 대한 정보입니다. | |
쿼리에 대한 실행 통계가 포함된 stats 필드를 포함한 쿼리 계획에 대한 정보입니다. |
Explain 응답
explain
응답은 쿼리의 실행 통계를 설명하는 키와 값이 포함된 BSON 문서입니다. 결과 세트의 explain
문서에는 다음 필드가 포함되어 있습니다.
옵션 | 유형 | 필요성 | 목적 |
---|---|---|---|
path | 문자열 | 옵션 | 연산자의 경로(루트가 아닌 경우에만). |
type | 문자열 | 필수 사항 | Atlas Search 연산자가 생성한 Lucene 쿼리의 이름입니다. 자세한 내용은 Lucene 쿼리 구조화 요약을 참조하세요. |
analyzer | 문자열 | 옵션 | 쿼리와 함께 사용된 Atlas Search 분석기 입니다. |
args | 문서 | 필수 사항 | Lucene 쿼리 정보 자세한 내용은 Lucene 쿼리 구조화 요약을 참조하세요. |
stats | 문서 | 옵션 |
제한 사항
explain
으로 패싯 쿼리를 실행할 수 없습니다.
예시
다음 예시에서는 sample_mflix
데이터베이스의 movies
컬렉션을 사용합니다.
팁
샘플 데이터 집합을 이미 로드한 경우, 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
결과에는 mongod
이 mongot
에서 요청한 문서 수를 보여주는 mongotDocsRequested
지표가 포함됩니다.
예시
{ "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) }