Menu Docs
Página inicial do Docs
/ /

Explique os resultados da Vector Search do MongoDB

Quando você executa uma query do MongoDB Vector Search com o método explain, a query retorna um documentoBSON do contendo plano de query e estatísticas de execução que descrevem como a query foi executada internamente.

Dica

explicar comando

db.<myCollection>.explain("<verbosity>").aggregate([
{
"$vectorSearch": {
"exact": true | false,
"filter": {<filter-specification>},
"index": "<index-name>",
"limit": <number-of-results>,
"numCandidates": <number-of-candidates>,
"path": "<field-to-search>",
"queryVector": [<array-of-numbers>],
"explainOptions": {
"traceDocumentIds": [<array-of-document-IDs>]
}
}
}
])

O modo Verbosidade controla o comportamento do explain e a quantidade de informações retornadas. O valor pode ser um dos seguintes, em ordem decrescente de verbosidade:

Informações sobre o plano de query , incluindo os campos stats, que contêm estatísticas de execução da query. Inclui dados de execução parcial capturados durante a seleção do plano.

Informações sobre o plano de query, incluindo os campos stats, que contêm estatísticas de execução para a query.

queryPlanner (padrão)

Informações sobre o plano de query. Não inclui os campos stats, que contêm as estatísticas de execução da query.

O método explain retorna um documento BSON com os seguintes campos.

Opção
Tipo
necessidade
Propósito

collectors

documento

Opcional

Descreve as estatísticas de execução do coletor.

metadata

documento

Opcional

Contém metadados úteis.

query

documento

Opcional

Descreve as estatísticas de execução da query. Isto não está presente no nível superior para indexPartitionExplain.

resultMaterialization

documento

Opcional

Detalhes relacionados à recuperação de dados por documento após a execução da query. Isto não é devolvido para o modo de verbosidade queryPlanner .

resourceUsage

documento

Opcional

Detalha o uso de recursos da query quando ela foi executada. Isso não é retornado para o modo de detalhamento queryPlanner.

vectorTracing

Array de objetos

Opcional

Detalhes de rastreamento, como os seguintes, sobre vetores nos documentos especificados:

luceneVectorSegmentStats

Array de objetos

Opcional

Detalhes do segmento por Lucene da $vectorSearch execução da query .

O collectors é um documento BSON com o seguinte campo:

Campo
Tipo
necessidade
Propósito

allCollectorStats

documento

Obrigatório

Estatísticas de todos os coletores da query. As estatísticas relatadas representam o valor máximo em todos os coletores usados na query ou uma soma da estatística em todos os subcoletores. As estatísticas de tempo são somadas para refletir o tempo total gasto em todos os coletores para toda a query. Para saber mais, consulte allCollectorStats.

O allCollectorStats é um documento BSON que descreve as estatísticas do coletor em todos os coletores especificados na query. Contém as seguintes chaves:

Campo
Descrição

collect

Acompanha a duração e o número de resultados coletados pelo coletor.

competitiveIterator

Estatísticas que rastreiam a duração total e o número de vezes que um competitiveIterator foi solicitado ao coletor.

setScorer

Estatísticas que monitoram a duração total e o número de vezes que um pontuador foi configurado no coletor.

O metadata contém metadados úteis, como os seguintes:

Campo
Tipo
necessidade
Propósito

mongotVersion

String

Opcional

Versão atual de mongot.

mongotHostName

String

Opcional

Etiqueta legível por humanos que identifica o host mongot.

indexName

String

Opcional

Índice de Vector Search do MongoDB usado na query.

cursorOptions

Documento

Opcional

Opções de cursor dadas a mongot.

totalLuceneDocs

Inteiro

Opcional

Número total de documentos no índice, incluindo documentos excluídos.

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:

Campo
Tipo
necessidade
Propósito

path

string

Opcional

Caminho para o campo de incorporação da consulta, somente se não for a raiz.

type

string

Obrigatório

Nome do tipo de query de pesquisa vetorial . Consulte query para mais informações.

args

documento

Obrigatório

Informações sobre a query de pesquisa vetorial. Consulte query para mais informações.

stats

documento

Opcional

stats para a query se explain foi executado com o detalhamento executionStats ou allPlansExecution.

A resposta de explicação contém informações como a query foi executada internamente. O campo args inclui os seguintes detalhes:

  • Tipo de query

  • Um exemplo de resumo estruturado para cada tipo de query

  • Opções de query no resumo estruturado

As seções a seguir descrevem os tipos de query e os campos nos resumos estruturados:

WrappedKnnQuery

Uma query wrapper usada para pesquisa vetorial de ANN que combina múltiplas queries. O resumo estruturado inclui detalhes sobre a seguinte opção:

Campo
Tipo
necessidade
Descrição

query

Array

Obrigatório

Array de subqueries usadas na pesquisa vetorial, normalmente contendo KnnFloatVectorQuery e DocAndScoreQuery.

KnnFloatVectorQuery

Um tipo de query específico para a pesquisa ANN em vetores flutuantes. O resumo estruturado inclui detalhes sobre as seguintes opções:

Campo
Tipo
necessidade
Descrição

field

String

Obrigatório

O caminho do campo vetorial que está sendo pesquisado.

k

Inteiro

Obrigatório

Número de vizinhos mais próximos a serem recuperados.

DocAndScoreQuery

Um tipo de query que lida com a correspondência e a pontuação de documento . O resumo estruturado normalmente inclui estatísticas sobre a execução da query.

ExactVectorSearchQuery

Um tipo de query para pesquisas de vetor ENN. O resumo estruturado inclui detalhes sobre as seguintes opções:

Campo
Tipo
necessidade
Descrição

field

String

Obrigatório

O caminho do campo vetorial que está sendo pesquisado.

similarityFunction

String

Obrigatório

A função de similaridade utilizada (dotProduct, cosine ou euclidean).

filter

Documento

Opcional

Query pré-filtro que limita o escopo da pesquisa vetorial.

BooleanQuery

Se você usar um pré-filtro em sua query de pesquisa vetorial, seus resultados de explicação incluirão o tipo BooleanQuery . Para saber mais sobre os campos deste tipo e de outros tipos de query específicos para sua query pré-filtro, consulte os Tipos de Query na Página Explicação da Pesquisa do MongoDB.

DefaultQuery

As queries que não são explicitamente definidas por outra query são serializadas usando a query padrão. O resumo estruturado inclui detalhes sobre a seguinte opção:

Campo
Tipo
necessidade
Descrição

queryType

String

Obrigatório

Tipo de query.

A resposta explain para os modos de detalhamento executionStats e allPlansExecution inclui um campo stats que contém informações sobre quanto tempo uma query gasta em vários estágios de sua execução.

O detalhamento do tempo descreve as estatísticas de execução pertinentes a áreas de execução da query. Os campos a seguir mostram o detalhamento do tempo:

Campo
Tipo
Descrição

millisElapsed

Long

O tempo aproximado do relógio na parede decorrido executando tarefas nessa área, incluindo a quantidade de tempo que os filhos da query gastaram nessa área. O valor é o número aproximado de milissegundos decorridos durante a execução de tarefas nesta área.

invocationCounts

Documento

Número de invocações de tarefas incluídas nesta área. O valor é um mapa de nomes de tarefas para sua contagem de invocação.

As estatísticas estão disponíveis para as seguintes áreas de query:

Opção
Descrição

context

Estatísticas relacionadas à execução da query de pesquisa vetorial . Há duas tarefas cujas contagens de invocação estão enumeradas nesta área:

createScorer

O Scorer itera sobre os documentos e gera uma pontuação para cada documento. Invocações de createScorer criam o objeto responsável pela pontuação. Observe que o tempo associado a essa tarefa não é o tempo gasto na classificação de documentos. A contagem inclui o número de invocações scorerSupplier .

createWeight

O estado das lojas de peso associado a uma query e IndexSearcher. A contagem inclui o número de invocações createWeight .

O tempo gasto nessa área está relacionado à estrutura da query e não é baseado no número de resultados que são iterados e pontuados.

Por exemplo:

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

match

Estatísticas relacionadas à iteração e à correspondência de documentos de resultados. Essa estatística mostra o tempo necessário para determinar qual documento é a próxima correspondência. O tempo gasto na correspondência de resultados pode variar significativamente, dependendo da natureza da query. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:

nextDoc

Solicitações para avançar para o próximo documento do conjunto de resultados. Isso envolve identificar e mover saltos anteriores, ou outras tarefas necessárias para encontrar a próxima correspondência. A contagem inclui o número de invocações nextDoc e advance .

refineRoughMatch

Executa uma correspondência mais completa. Algumas query são executadas em um processo de duas fases, em que um documento é primeiro correspondido "aproximadamente" e é verificado com uma segunda fase, mais completa, somente depois de satisfazer a primeira correspondência aproximada. A tarefa refineRoughMatch é a segunda fase do processo de duas fases. A contagem inclui o número de invocações refineRoughMatch .

Por exemplo:

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

score

Estatísticas relacionadas à pontuação de documentos no conjunto de resultados. Há duas tarefas cujas contagens de invocação são enumeradas nesta área:

score

Classifica cada documento no conjunto de resultados. A contagem inclui o número de invocações score .

setMinCompetitiveScore

Ignora documentos cuja pontuação é menor que o valor fornecido. Indica que uma query pode ter sido capaz de reduzir o número de operações de pontuação realizadas ignorando documentos com pontuações abaixo de um limite não concorrência. A contagem inclui o número de invocações setMinCompetitiveScore .

Por exemplo:

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

O documento resourceUsage mostra o recurso utilizado para executar a query. Ele contém os seguintes campos:

Campo
Tipo
necessidade
Propósito

majorFaults

Long

Obrigatório

Número de falhas de página principais, que ocorrem quando o sistema não consegue encontrar os dados necessários na memória, resultando na leitura do armazenamento de apoio, como disco, durante a execução da query.

minorFaults

Long

Obrigatório

Número de falhas de página menores, que ocorrem quando os dados estão no cache de página, mas ainda não foram mapeados para a tabela de páginas do processo.

userTimeMs

Long

Obrigatório

Tempo da CPU, em milissegundos, gasto no espaço do usuário.

systemTimeMs

Long

Obrigatório

Tempo da CPU, em milissegundos, gasto no espaço do sistema.

maxReportingThreads

Inteiro

Obrigatório

Número máximo de threads que mongot utilizou durante a execução da query em todos os lotes. Para consultas de explicação não concorrentes, o valor é 1.

numBatches

Inteiro

Obrigatório

Número total de lotes que mongot foi solicitado ao processar a query.

A array vectorTracing contém uma lista de objetos, um por documento, que possui os seguintes detalhes sobre os vetores no documento:

Campo
Tipo
necessidade
Propósito

visited

Boolean

Obrigatório

Sinalizador que especifica se o vetor rastreado foi visitado durante a execução da query.

dropReason

String

Condicional

Motivo para descartar o vetor. Isto está presente somente se o vetor foi visitado e descartado dos resultados. O valor pode ser:

  • Merge

  • NonCompetitiveScore

  • Filter

  • Rescoring

vectorSearchScore

Double

Condicional

Pontuação associada ao vetor. Isto está presente apenas se o vetor foi visitado

luceneSegment

Inteiro

Obrigatório

Número do segmento Lucene ao qual o vetor pertence. Para saber mais,luceneVectorSegmentStats consulte.

unreachable

Boolean

Condicional

Sinalizador que especifica se o vetor é inacessível. Está presente apenas se o vetor não estiver acessível.

A luceneVectorSegmentStats array de objetos contém detalhamento por segmento Lucene da $vectorSearch execução da query. Cada segmento é identificado por um número e inclui os parâmetros que descrevem os detalhes de execução da query.

{
"0": {
"executionType": "Approximate",
"approximateTimeMillis": 0.10825,
"filterMatchedDocsCount": 0,
"docCount": 100
},
"1": {
"executionType": "Exact",
"exactTimeMillis": 0.10825,
"filterMatchedDocsCount": 0,
"docCount": 55
},
"2": {
"executionType": "ApproximateToExactFallback",
"approximateTimeMillis": 0.10825,
"exactTimeMillis": 0.10825,
"filterMatchedDocsCount": 0,
"docCount": 55
}
}
Campo
Tipo
necessidade
Propósito

executionType

String

Obrigatório

A estratégia de execução. O valor pode ser um dos seguintes:

  • Approximate

  • Exact

  • ApproximateToExactFallback

approximateStage

Float

Condicional

Tempo (em milissegundos) para a fase aproximada. Isso é retornado apenas para os tipos de execução Approximate e ApproximateFallbackToExact.

exactStage

Float

Condicional

Tempo (em milissegundos) para a fase Exata. Isso é retornado apenas para os tipos de execução Exact e ApproximateFallbackToExact.

filterMatchedDocsCount

Inteiro

Opcional

O número de documentos que corresponderam ao filtro de consulta se você especificou um pré-filtro na consulta.

docCount

Inteiro

Obrigatório

Número total de documentos no segmento.

Os exemplos a seguir usam o método explain em amostras de queries ANN e ENN. Se você deseja executar os exemplos a seguir em seu próprio ambiente, você deve primeiro concluir o Início Rápido da Vector Search MongoDB usando mongosh.

O exemplo a seguir executa o método explain em uma query de pesquisa vetorial de ANN e ENN para o campo plot_embedding_voyage_3_large com o modo de verbosidade allPlansExecution.

db.embedded_movies.explain("allPlansExecution").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"numCandidates": 150,
"limit": 10
}
}
])
1{
2 explainVersion: '1',
3 stages: [
4 {
5 '$vectorSearch': {
6 index: 'vector_index',
7 path: 'plot_embedding_voyage_3_large',
8 queryVector: 'redacted',
9 numCandidates: 150,
10 limit: 10,
11 explain: {
12 query: {
13 type: 'WrappedKnnQuery',
14 args: {
15 query: [
16 {
17 type: 'InstrumentableKnnFloatVectorQuery',
18 args: {
19 field: '$type:knnVector/plot_embedding_voyage_3_large',
20 k: 150
21 },
22 stats: {
23 context: { millisElapsed: 0 },
24 match: { millisElapsed: 0 },
25 score: { millisElapsed: 0 }
26 }
27 },
28 {
29 type: 'DocAndScoreQuery',
30 args: {},
31 stats: {
32 context: {
33 millisElapsed: 1.378949,
34 invocationCounts: {
35 createWeight: Long('1'),
36 createScorer: Long('4')
37 }
38 },
39 match: {
40 millisElapsed: 0.341389,
41 invocationCounts: { nextDoc: Long('152') }
42 },
43 score: {
44 millisElapsed: 0.205415,
45 invocationCounts: {
46 score: Long('150'),
47 setMinCompetitiveScore: Long('26')
48 }
49 }
50 }
51 }
52 ]
53 },
54 stats: {
55 context: {
56 millisElapsed: 57.285674,
57 invocationCounts: {
58 vectorExecution: Long('1'),
59 createWeight: Long('1'),
60 createScorer: Long('4')
61 }
62 },
63 match: {
64 millisElapsed: 0.341389,
65 invocationCounts: { nextDoc: Long('152') }
66 },
67 score: {
68 millisElapsed: 0.205415,
69 invocationCounts: {
70 score: Long('150'),
71 setMinCompetitiveScore: Long('26')
72 }
73 }
74 }
75 },
76 collectors: {
77 allCollectorStats: {
78 millisElapsed: 0.840381,
79 invocationCounts: {
80 collect: Long('150'),
81 competitiveIterator: Long('2'),
82 setScorer: Long('2')
83 }
84 }
85 },
86 metadata: {
87 mongotVersion: '1.54.0',
88 mongotHostName: '<hostname>.mongodb.net',
89 indexName: 'vector_index',
90 lucene: { totalSegments: 2, totalDocs: 3483 }
91 },
92 resourceUsage: {
93 majorFaults: Long('0'),
94 minorFaults: Long('0'),
95 userTimeMs: Long('0'),
96 systemTimeMs: Long('0'),
97 maxReportingThreads: 1,
98 numBatches: 1
99 },
100 luceneVectorSegmentStats: [
101 {
102 id: '_0',
103 executionType: 'Approximate',
104 docCount: 1952,
105 approximateStage: { millisElapsed: 32.916505 }
106 },
107 {
108 id: '_1',
109 executionType: 'Approximate',
110 docCount: 1531,
111 approximateStage: { millisElapsed: 8.661519 }
112 }
113 ]
114 }
115 },
116 nReturned: Long('10'),
117 executionTimeMillisEstimate: Long('256')
118 },
119 {
120 '$_internalSearchIdLookup': {
121 limit: Long('10'),
122 subPipeline: [
123 { '$match': { _id: { '$eq': '_id placeholder' } } }
124 ],
125 totalDocsExamined: Long('10'),
126 totalKeysExamined: Long('10'),
127 numDocsFilteredByIdLookup: Long('0')
128 },
129 nReturned: Long('10'),
130 executionTimeMillisEstimate: Long('256')
131 }
132 ],
133 queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
134 serverInfo: {
135 host: '<hostname>.mongodb.net',
136 port: 27017,
137 version: '8.2.1-rc1',
138 gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
139 },
140 serverParameters: {
141 internalQueryFacetBufferSizeBytes: 104857600,
142 internalQueryFacetMaxOutputDocSizeBytes: 104857600,
143 internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
144 internalDocumentSourceGroupMaxMemoryBytes: 104857600,
145 internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
146 internalQueryProhibitBlockingMergeOnMongoS: 0,
147 internalQueryMaxAddToSetBytes: 104857600,
148 internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
149 internalQueryFrameworkControl: 'trySbeRestricted',
150 internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
151 },
152 command: {
153 aggregate: 'embedded_movies',
154 pipeline: [
155 {
156 '$vectorSearch': {
157 index: 'vector_index',
158 path: 'plot_embedding_voyage_3_large',
159 queryVector: [
160 -0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
161 ...,
162 -0.006688767, 0.047527634, 0.040714234
163 ],
164 numCandidates: 150,
165 limit: 10
166 }
167 }
168 ],
169 cursor: {},
170 '$db': 'sample_mflix'
171 },
172 ok: 1,
173 '$clusterTime': {
174 clusterTime: Timestamp({ t: 1759341228, i: 32 }),
175 signature: {
176 hash: Binary.createFromBase64('BsaUr/khHU1Fyl5/g8htqoavlU8=', 0),
177 keyId: Long('7553982574624768005')
178 }
179 },
180 operationTime: Timestamp({ t: 1759341228, i: 32 })
181}
db.embedded_movies.explain("allPlansExecution").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"exact": true,
"limit": 10
}
}
])
{
explainVersion: '1',
stages: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: 'redacted',
exact: true,
limit: 10,
explain: {
query: {
type: 'ExactVectorSearchQuery',
args: {
field: '$type:knnVector/plot_embedding_voyage_3_large',
similarityFunction: 'dotProduct',
filter: {
type: 'DefaultQuery',
args: { queryType: 'FieldExistsQuery' },
stats: {
context: {
millisElapsed: 0.756254,
invocationCounts: {
createWeight: Long('1'),
createScorer: Long('4')
}
},
match: {
millisElapsed: 3.835071,
invocationCounts: { nextDoc: Long('3405') }
},
score: { millisElapsed: 0 }
}
}
},
stats: {
context: {
millisElapsed: 1.271846,
invocationCounts: { createWeight: Long('1'), createScorer: Long('4') }
},
match: {
millisElapsed: 7.699638,
invocationCounts: { nextDoc: Long('3405') }
},
score: {
millisElapsed: 139.077653,
invocationCounts: {
score: Long('3403'),
setMinCompetitiveScore: Long('63')
}
}
}
},
collectors: {
allCollectorStats: {
millisElapsed: 146.798572,
invocationCounts: {
collect: Long('3403'),
competitiveIterator: Long('2'),
setScorer: Long('2')
}
}
},
metadata: {
mongotVersion: '1.54.0',
mongotHostName: '<hostname>.mongodb.net',
indexName: 'vector_index',
lucene: { totalSegments: 2, totalDocs: 3483 }
},
resourceUsage: {
majorFaults: Long('0'),
minorFaults: Long('0'),
userTimeMs: Long('0'),
systemTimeMs: Long('0'),
maxReportingThreads: 1,
numBatches: 1
}
}
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('208')
},
{
'$_internalSearchIdLookup': {
limit: Long('10'),
subPipeline: [
{ '$match': { _id: { '$eq': '_id placeholder' } } }
],
totalDocsExamined: Long('10'),
totalKeysExamined: Long('10'),
numDocsFilteredByIdLookup: Long('0')
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('208')
}
],
queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
serverInfo: {
host: '<hostname>.mongodb.net',
port: 27017,
version: '8.2.1-rc1',
gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
},
serverParameters: {
internalQueryFacetBufferSizeBytes: 104857600,
internalQueryFacetMaxOutputDocSizeBytes: 104857600,
internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
internalDocumentSourceGroupMaxMemoryBytes: 104857600,
internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
internalQueryProhibitBlockingMergeOnMongoS: 0,
internalQueryMaxAddToSetBytes: 104857600,
internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
internalQueryFrameworkControl: 'trySbeRestricted',
internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
},
command: {
aggregate: 'embedded_movies',
pipeline: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: [
-0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
...,
-0.006688767, 0.047527634, 0.040714234
],
exact: true,
limit: 10
}
}
],
cursor: {},
'$db': 'sample_mflix'
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1759341655, i: 1 }),
signature: {
hash: Binary.createFromBase64('/pUN/IbVV/OKyakbZcIug8HRS8M=', 0),
keyId: Long('7553982574624768005')
}
},
operationTime: Timestamp({ t: 1759341655, i: 1 })
}

O exemplo a seguir executa o método explain em uma query de pesquisa vetorial de ANN e ENN para o campo plot_embedding_voyage_3_large com o modo de verbosidade queryPlanner.

db.embedded_movies.explain("queryPlanner").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"numCandidates": 150,
"limit": 10
}
}
])
{
explainVersion: '1',
stages: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: 'redacted',
numCandidates: 150,
limit: 10,
explain: {
query: {
type: 'WrappedKnnQuery',
args: {
query: [
{
type: 'InstrumentableKnnFloatVectorQuery',
args: {
field: '$type:knnVector/plot_embedding_voyage_3_large',
k: 150
}
},
{ type: 'DocAndScoreQuery', args: {} }
]
}
},
metadata: {
mongotVersion: '1.54.0',
mongotHostName: '<hostname>.mongodb.net',
indexName: 'vector_index',
lucene: { totalSegments: 2, totalDocs: 3483 }
}
}
}
},
{
'$_internalSearchIdLookup': {
limit: Long('10'),
subPipeline: [
{ '$match': { _id: { '$eq': '_id placeholder' } } }
]
}
}
],
queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
serverInfo: {
host: '<hostname>.mongodb.net',
port: 27017,
version: '8.2.1-rc1',
gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
},
serverParameters: {
internalQueryFacetBufferSizeBytes: 104857600,
internalQueryFacetMaxOutputDocSizeBytes: 104857600,
internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
internalDocumentSourceGroupMaxMemoryBytes: 104857600,
internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
internalQueryProhibitBlockingMergeOnMongoS: 0,
internalQueryMaxAddToSetBytes: 104857600,
internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
internalQueryFrameworkControl: 'trySbeRestricted',
internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
},
command: {
aggregate: 'embedded_movies',
pipeline: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: [
-0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
...,
-0.006688767, 0.047527634, 0.040714234
],
numCandidates: 150,
limit: 10
}
}
],
cursor: {},
'$db': 'sample_mflix'
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1759341765, i: 1 }),
signature: {
hash: Binary.createFromBase64('rPjwbtfbjVrbcvkkN0ct/b1UYa8=', 0),
keyId: Long('7553982574624768005')
}
},
operationTime: Timestamp({ t: 1759341765, i: 1 })
}
db.embedded_movies.explain("queryPlanner").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"exact": true,
"limit": 10
}
}
])
{
explainVersion: '1',
stages: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: 'redacted',
exact: true,
limit: 10,
explain: {
query: {
type: 'ExactVectorSearchQuery',
args: {
field: '$type:knnVector/plot_embedding_voyage_3_large',
similarityFunction: 'dotProduct',
filter: {
type: 'DefaultQuery',
args: { queryType: 'FieldExistsQuery' }
}
}
},
metadata: {
mongotVersion: '1.54.0',
mongotHostName: '<hostname>.mongodb.net',
indexName: 'vector_index',
lucene: { totalSegments: 2, totalDocs: 3483 }
}
}
}
},
{
'$_internalSearchIdLookup': {
limit: Long('10'),
subPipeline: [
{ '$match': { _id: { '$eq': '_id placeholder' } } }
]
}
}
],
queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
serverInfo: {
host: '<hostname>.mongodb.net',
port: 27017,
version: '8.2.1-rc1',
gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
},
serverParameters: {
internalQueryFacetBufferSizeBytes: 104857600,
internalQueryFacetMaxOutputDocSizeBytes: 104857600,
internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
internalDocumentSourceGroupMaxMemoryBytes: 104857600,
internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
internalQueryProhibitBlockingMergeOnMongoS: 0,
internalQueryMaxAddToSetBytes: 104857600,
internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
internalQueryFrameworkControl: 'trySbeRestricted',
internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
},
command: {
aggregate: 'embedded_movies',
pipeline: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: [
-0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
...,
-0.006688767, 0.047527634, 0.040714234
],
exact: true,
limit: 10
}
}
],
cursor: {},
'$db': 'sample_mflix'
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1759342075, i: 1 }),
signature: {
hash: Binary.createFromBase64('jQiwcAMEmfzFnVU/pyb29TnYu0w=', 0),
keyId: Long('7553982574624768005')
}
},
operationTime: Timestamp({ t: 1759342075, i: 1 })
}

O exemplo a seguir executa o método explain em uma query de pesquisa vetorial de ANN e ENN para o campo plot_embedding_voyage_3_large com o modo de verbosidade executionStats.

db.embedded_movies.explain("executionStats").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"numCandidates": 150,
"limit": 10
}
}
])
{
explainVersion: '1',
stages: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: 'redacted',
numCandidates: 150,
limit: 10,
explain: {
query: {
type: 'WrappedKnnQuery',
args: {
query: [
{
type: 'InstrumentableKnnFloatVectorQuery',
args: {
field: '$type:knnVector/plot_embedding_voyage_3_large',
k: 150
},
stats: {
context: { millisElapsed: 0 },
match: { millisElapsed: 0 },
score: { millisElapsed: 0 }
}
},
{
type: 'DocAndScoreQuery',
args: {},
stats: {
context: {
millisElapsed: 0.013013,
invocationCounts: {
createWeight: Long('1'),
createScorer: Long('4')
}
},
match: {
millisElapsed: 0.459619,
invocationCounts: { nextDoc: Long('152') }
},
score: {
millisElapsed: 0.179147,
invocationCounts: {
score: Long('150'),
setMinCompetitiveScore: Long('26')
}
}
}
}
]
},
stats: {
context: {
millisElapsed: 7.113224,
invocationCounts: {
vectorExecution: Long('1'),
createWeight: Long('1'),
createScorer: Long('4')
}
},
match: {
millisElapsed: 0.459619,
invocationCounts: { nextDoc: Long('152') }
},
score: {
millisElapsed: 0.179147,
invocationCounts: {
score: Long('150'),
setMinCompetitiveScore: Long('26')
}
}
}
},
collectors: {
allCollectorStats: {
millisElapsed: 0.868815,
invocationCounts: {
collect: Long('150'),
competitiveIterator: Long('2'),
setScorer: Long('2')
}
}
},
metadata: {
mongotVersion: '1.54.0',
mongotHostName: '<hostname>.mongodb.net',
indexName: 'vector_index',
lucene: { totalSegments: 2, totalDocs: 3483 }
},
resourceUsage: {
majorFaults: Long('0'),
minorFaults: Long('0'),
userTimeMs: Long('0'),
systemTimeMs: Long('0'),
maxReportingThreads: 1,
numBatches: 1
},
luceneVectorSegmentStats: [
{
id: '_1',
executionType: 'Approximate',
docCount: 1531,
approximateStage: { millisElapsed: 2.58089 }
},
{
id: '_0',
executionType: 'Approximate',
docCount: 1952,
approximateStage: { millisElapsed: 3.483542 }
}
]
}
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('29')
},
{
'$_internalSearchIdLookup': {
limit: Long('10'),
subPipeline: [
{ '$match': { _id: { '$eq': '_id placeholder' } } }
],
totalDocsExamined: Long('10'),
totalKeysExamined: Long('10'),
numDocsFilteredByIdLookup: Long('0')
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('30')
}
],
queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
serverInfo: {
host: '<hostname>.mongodb.net',
port: 27017,
version: '8.2.1-rc1',
gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
},
serverParameters: {
internalQueryFacetBufferSizeBytes: 104857600,
internalQueryFacetMaxOutputDocSizeBytes: 104857600,
internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
internalDocumentSourceGroupMaxMemoryBytes: 104857600,
internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
internalQueryProhibitBlockingMergeOnMongoS: 0,
internalQueryMaxAddToSetBytes: 104857600,
internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
internalQueryFrameworkControl: 'trySbeRestricted',
internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
},
command: {
aggregate: 'embedded_movies',
pipeline: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: [
-0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
...,
-0.006688767, 0.047527634, 0.040714234
],
numCandidates: 150,
limit: 10
}
}
],
cursor: {},
'$db': 'sample_mflix'
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1759342175, i: 1 }),
signature: {
hash: Binary.createFromBase64('AZZrjVPfyyBofyQq/gzs9UBL+/Q=', 0),
keyId: Long('7553982574624768005')
}
},
operationTime: Timestamp({ t: 1759342175, i: 1 })
}
db.embedded_movies.explain("executionStats").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"exact": true,
"limit": 10
}
}
])
{
explainVersion: '1',
stages: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: 'redacted',
exact: true,
limit: 10,
explain: {
query: {
type: 'ExactVectorSearchQuery',
args: {
field: '$type:knnVector/plot_embedding_voyage_3_large',
similarityFunction: 'dotProduct',
filter: {
type: 'DefaultQuery',
args: { queryType: 'FieldExistsQuery' },
stats: {
context: {
millisElapsed: 0.037129,
invocationCounts: {
createWeight: Long('1'),
createScorer: Long('4')
}
},
match: {
millisElapsed: 1.128957,
invocationCounts: { nextDoc: Long('3405') }
},
score: { millisElapsed: 0 }
}
}
},
stats: {
context: {
millisElapsed: 0.061268,
invocationCounts: { createWeight: Long('1'), createScorer: Long('4') }
},
match: {
millisElapsed: 2.531393,
invocationCounts: { nextDoc: Long('3405') }
},
score: {
millisElapsed: 7.956341,
invocationCounts: {
score: Long('3403'),
setMinCompetitiveScore: Long('63')
}
}
}
},
collectors: {
allCollectorStats: {
millisElapsed: 10.004281,
invocationCounts: {
collect: Long('3403'),
competitiveIterator: Long('2'),
setScorer: Long('2')
}
}
},
metadata: {
mongotVersion: '1.54.0',
mongotHostName: '<hostname>.mongodb.net',
indexName: 'vector_index',
lucene: { totalSegments: 2, totalDocs: 3483 }
},
resourceUsage: {
majorFaults: Long('0'),
minorFaults: Long('0'),
userTimeMs: Long('0'),
systemTimeMs: Long('0'),
maxReportingThreads: 1,
numBatches: 1
}
}
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('25')
},
{
'$_internalSearchIdLookup': {
limit: Long('10'),
subPipeline: [
{ '$match': { _id: { '$eq': '_id placeholder' } } }
],
totalDocsExamined: Long('10'),
totalKeysExamined: Long('10'),
numDocsFilteredByIdLookup: Long('0')
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('26')
}
],
queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
serverInfo: {
host: '<hostname>.mongodb.net',
port: 27017,
version: '8.2.1-rc1',
gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
},
serverParameters: {
internalQueryFacetBufferSizeBytes: 104857600,
internalQueryFacetMaxOutputDocSizeBytes: 104857600,
internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
internalDocumentSourceGroupMaxMemoryBytes: 104857600,
internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
internalQueryProhibitBlockingMergeOnMongoS: 0,
internalQueryMaxAddToSetBytes: 104857600,
internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
internalQueryFrameworkControl: 'trySbeRestricted',
internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
},
command: {
aggregate: 'embedded_movies',
pipeline: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: [
-0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
...,
-0.006688767, 0.047527634, 0.040714234
],
exact: true,
limit: 10
}
}
],
cursor: {},
'$db': 'sample_mflix'
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1759342255, i: 1 }),
signature: {
hash: Binary.createFromBase64('sHuAxj9o8MbGe4iRz0Pv1PSi+UY=', 0),
keyId: Long('7553982574624768005')
}
},
operationTime: Timestamp({ t: 1759342255, i: 1 })
}
db.embedded_movies.explain("executionStats").aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "plot_embedding_voyage_3_large",
"queryVector": QUERY_EMBEDDING,
"numCandidates": 150,
"limit": 10,
"explainOptions": {
"traceDocumentIds": [
ObjectId('573a13d8f29313caabda6557'), ObjectId('573a1398f29313caabce98d9'), ObjectId('573a1391f29313caabcd8319'), ObjectId('573a1398f29313caabceb500'), ObjectId('573a1397f29313caabce780e')
]
}
}
}
])
{
explainVersion: '1',
stages: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: 'redacted',
numCandidates: 150,
limit: 10,
explainOptions: {
traceDocumentIds: [
ObjectId('573a13d8f29313caabda6557'),
ObjectId('573a1398f29313caabce98d9'),
ObjectId('573a1391f29313caabcd8319'),
ObjectId('573a1398f29313caabceb500'),
ObjectId('573a1397f29313caabce780e')
]
},
explain: {
query: {
type: 'WrappedKnnQuery',
args: {
query: [
{
type: 'InstrumentableKnnFloatVectorQuery',
args: {
field: '$type:knnVector/plot_embedding_voyage_3_large',
k: 150
},
stats: {
context: { millisElapsed: 0 },
match: { millisElapsed: 0 },
score: { millisElapsed: 0 }
}
},
{
type: 'DocAndScoreQuery',
args: {},
stats: {
context: {
millisElapsed: 0.010987,
invocationCounts: {
createWeight: Long('1'),
createScorer: Long('4')
}
},
match: {
millisElapsed: 0.009977,
invocationCounts: { nextDoc: Long('152') }
},
score: {
millisElapsed: 0.018875,
invocationCounts: {
score: Long('150'),
setMinCompetitiveScore: Long('26')
}
}
}
}
]
},
stats: {
context: {
millisElapsed: 7.55246,
invocationCounts: {
vectorExecution: Long('1'),
createWeight: Long('1'),
createScorer: Long('4')
}
},
match: {
millisElapsed: 0.009977,
invocationCounts: { nextDoc: Long('152') }
},
score: {
millisElapsed: 0.018875,
invocationCounts: {
score: Long('150'),
setMinCompetitiveScore: Long('26')
}
}
}
},
collectors: {
allCollectorStats: {
millisElapsed: 0.148807,
invocationCounts: {
collect: Long('150'),
competitiveIterator: Long('2'),
setScorer: Long('2')
}
}
},
metadata: {
mongotVersion: '1.54.0',
mongotHostName: '<hostname>.mongodb.net',
indexName: 'vector_index',
lucene: { totalSegments: 2, totalDocs: 3483 }
},
resourceUsage: {
majorFaults: Long('0'),
minorFaults: Long('0'),
userTimeMs: Long('0'),
systemTimeMs: Long('0'),
maxReportingThreads: 1,
numBatches: 1
},
vectorTracing: [
{
documentId: ObjectId('573a1391f29313caabcd8319'),
visited: false,
luceneSegment: '_0'
},
{
documentId: ObjectId('573a1397f29313caabce780e'),
visited: true,
vectorSearchScore: 0.7469133734703064,
luceneSegment: '_0'
},
{
documentId: ObjectId('573a1398f29313caabce98d9'),
visited: false,
luceneSegment: '_0'
},
{
documentId: ObjectId('573a1398f29313caabceb500'),
visited: true,
vectorSearchScore: 0.7521393895149231,
luceneSegment: '_0'
},
{
documentId: ObjectId('573a13d8f29313caabda6557'),
visited: true,
vectorSearchScore: 0.7710106372833252,
luceneSegment: '_1'
}
],
luceneVectorSegmentStats: [
{
id: '_1',
executionType: 'Approximate',
docCount: 1531,
approximateStage: { millisElapsed: 2.73042 }
},
{
id: '_0',
executionType: 'Approximate',
docCount: 1952,
approximateStage: { millisElapsed: 4.136979 }
}
]
}
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('21')
},
{
'$_internalSearchIdLookup': {
limit: Long('10'),
subPipeline: [
{ '$match': { _id: { '$eq': '_id placeholder' } } }
],
totalDocsExamined: Long('10'),
totalKeysExamined: Long('10'),
numDocsFilteredByIdLookup: Long('0')
},
nReturned: Long('10'),
executionTimeMillisEstimate: Long('22')
}
],
queryShapeHash: '2E39BED257F2B59D3F8652E1A81A18B1140602C4E253DED9FE208D584EA00083',
serverInfo: {
host: '<hostname>.mongodb.net',
port: 27017,
version: '8.2.1-rc1',
gitVersion: '3312bdcf28aa65f5930005e21c2cb130f648b8c3'
},
serverParameters: {
internalQueryFacetBufferSizeBytes: 104857600,
internalQueryFacetMaxOutputDocSizeBytes: 104857600,
internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
internalDocumentSourceGroupMaxMemoryBytes: 104857600,
internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
internalQueryProhibitBlockingMergeOnMongoS: 0,
internalQueryMaxAddToSetBytes: 104857600,
internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
internalQueryFrameworkControl: 'trySbeRestricted',
internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
},
command: {
aggregate: 'embedded_movies',
pipeline: [
{
'$vectorSearch': {
index: 'vector_index',
path: 'plot_embedding_voyage_3_large',
queryVector: [
-0.034731735, 0.008558298, -0.0153717, -0.029912498, 0.011549547,
...,
-0.006688767, 0.047527634, 0.040714234
],
numCandidates: 150,
limit: 10,
explainOptions: {
traceDocumentIds: [
ObjectId('573a13d8f29313caabda6557'),
ObjectId('573a1398f29313caabce98d9'),
ObjectId('573a1391f29313caabcd8319'),
ObjectId('573a1398f29313caabceb500'),
ObjectId('573a1397f29313caabce780e')
]
}
}
}
],
cursor: {},
'$db': 'sample_mflix'
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1759343038, i: 1 }),
signature: {
hash: Binary.createFromBase64('E3FSIwLHavtFVMsmuqJM5reQc4I=', 0),
keyId: Long('7553982574624768005')
}
},
operationTime: Timestamp({ t: 1759343038, i: 1 })
}

Voltar

Referência de query

Nesta página