Recuperar o plano de query e as estatísticas de execução
A query do Atlas Search retorna informações sobre o plano de query $search
e a estatística de execução quando a query é executada com o método explain
. Quando você executa uma query com explain
, o Atlas Search retorna um documento BSON contendo informações sobre como a query foi executada.
Sintaxe
db.<myCollection>.explain("<verbosity>").aggregate([ { $search: { "<operator>": { "<operator-options>" } } } ])
Detalhamento
O modo Verbosidade controla o comportamento do explain
e a quantidade de informações retornadas. O valor pode ser um dos seguintes:
queryPlanner (padrão) | Informações sobre o plano de query. Não inclui o campo |
Informações sobre o plano de query incluindo o campo | |
Informações sobre o plano de query incluindo o campo |
Explicar resposta
A resposta explain
é um documento BSON com chaves e valores que descrevem a estatística de execução da query. O documento explain
no conjunto de resultados contém os seguintes campos:
Opção | Tipo | necessidade | Propósito |
---|---|---|---|
| string | Opcional | Caminho para o operador, somente se não for a raiz. |
| string | Obrigatório | Nome da query Lucene que o operador do Atlas Search criou. Para obter mais informações, consulte Resumo estruturado da query do Lucene. |
| string | Opcional | O analisador do Atlas Search usado com a query. |
| documento | Obrigatório | Informações sobre a query do Lucene. Para obter mais informações, consulte Resumo estruturado da query do Lucene. |
| documento | Opcional | Explicar o detalhamento do tempo da query se |
Limitações
Você não pode executar queries facet com explain
.
Exemplos
Os exemplos seguintes utilizam a collection movies
no banco de dados sample_mflix
.
Dica
Se você já carregou o conjunto de dados de amostra, siga o tutorial Iniciar com Atlas Search para criar uma definição de índice e executar queries de Atlas Search.
queryPlanner
O exemplo seguinte utiliza o operador text para fazer uma query do campo title
com o modo de detalhamento queryPlanner
.
db.movies.explain("queryPlanner").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
A consulta retorna os seguintes resultados. Para saber mais sobre os elementos de resposta explain
, consulte Explicar resposta.
{ "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) }
Para queries que especificam um estágio $limit
no pipeline, os resultados do explain
incluem a métrica mongotDocsRequested
que mostra o número de documentos que o mongod
solicitou do mongot
.
Exemplo
{ "mongotQuery": {}, "explain": {}, "limit": <int>, "sortSpec": {}, "mongotDocsRequested": <int>, }
executionStats
O exemplo a seguir usa o operador autocomplete para fazer uma query do campo title
com o modo de detalhamento executionStats
.
db.movies.explain("executionStats").aggregate([ { "$search": { "autocomplete": { "path": "title", "query": "pre", "fuzzy": { "maxEdits": 1, "prefixLength": 1, "maxExpansions": 256 } } } } ])
A consulta retorna os seguintes resultados. Para saber mais sobre os elementos de resposta explain
, consulte Explicar resposta.
{ "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) }