Docs Menu
Docs Home
/ /

Explique los resultados de la búsqueda vectorial de MongoDB

Cuando ejecuta una consulta de búsqueda vectorial de MongoDB con el explain método, la consulta devuelve un DocumentoBSON que contiene el plan de consulta y las estadísticas de ejecución que describen cómo se ejecutó la consulta internamente.

Tip

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>]
}
}
}
])

El modo de verbosidad controla el comportamiento de explain y la cantidad de información devuelta. El valor puede ser uno de los siguientes, en orden de verbosidad decreciente:

Información sobre el plan de consulta, incluidos los campos stats, que contienen estadísticas de ejecución de la consulta. Incluye datos de ejecución parcial capturados durante la selección del plan.

Información sobre el plan de consulta, incluidos los campos stats, que contienen estadísticas de ejecución de la consulta.

queryPlanner (predeterminado)

Información sobre el plan de consulta. No incluye los campos stats, que contienen estadísticas de ejecución de la consulta.

El explain método devuelve un documento BSON con los siguientes campos.

Opción
Tipo
Necesidad
Propósito

collectors

Documento

Opcional

Describe las estadísticas de ejecución para el recopilador.

metadata

Documento

Opcional

Contiene metadatos útiles.

query

Documento

Opcional

Describe las estadísticas de ejecución de la consulta. Esto no está presente en el nivel superior para indexPartitionExplain.

resultMaterialization

Documento

Opcional

Detalles relacionados con la recuperación de datos por documento tras la ejecución de la consulta. Esto no se devuelve en el modo de verbosidad queryPlanner.

resourceUsage

Documento

Opcional

Detalla el uso de recursos de la consulta al ejecutarse. Esto no se devuelve en el modo de verbosidad queryPlanner.

vectorTracing

matriz de objetos

Opcional

Seguimiento de detalles, como los siguientes, sobre los vectores en los documentos especificados:

luceneVectorSegmentStats

matriz de objetos

Opcional

Detalles del segmento Per-Lucene de $vectorSearch ejecución de consulta.

El collectors es un documento BSON con el siguiente campo:

Campo
Tipo
Necesidad
Propósito

allCollectorStats

Documento

Requerido

Estadísticas de todos los recopiladores de la consulta. Las estadísticas reportadas representan el valor máximo de todos los recopiladores utilizados en la consulta o la suma de las estadísticas de todos los subrecopiladores. Las estadísticas de tiempo se suman para reflejar el tiempo total empleado en todos los recopiladores durante toda la consulta. Para obtener más información,allCollectorStats consulte.

El allCollectorStats es un documento BSON que describe las estadísticas de todos los recopiladores especificados en la consulta. Contiene las siguientes claves:

Campo
Descripción

collect

Realiza un seguimiento de la duración y el número de resultados recopilados por el recopilador.

competitiveIterator

Estadísticas que rastrean la duración total y la cantidad de veces que se solicitó un competitiveIterator al recopilador.

setScorer

Estadísticas que rastrean la duración total y el número de veces que se configuró un anotador en el recopilador.

El metadata contiene metadatos útiles, como los siguientes:

Campo
Tipo
Necesidad
Propósito

mongotVersion

String

Opcional

Versión actual de mongot.

mongotHostName

String

Opcional

Etiqueta legible por humanos que identifica el host mongot.

indexName

String

Opcional

Índice de búsqueda vectorial de MongoDB utilizado en la consulta.

cursorOptions

Documento

Opcional

Opciones de cursor dadas a mongot.

totalLuceneDocs

entero

Opcional

Número total de documentos en el índice, incluidos los documentos eliminados.

La explain respuesta es un documento BSON con claves y valores que describen las estadísticas de ejecución de la consulta. El explain documento del conjunto de resultados contiene los siguientes campos:

Campo
Tipo
Necesidad
Propósito

path

string

Opcional

Ruta al campo de incrustación consultado, solo si no es la raíz.

type

string

Requerido

Nombre del tipo de consulta de búsqueda vectorial. Consulte query para obtener más información.

args

Documento

Requerido

Información de la consulta de búsqueda vectorial. Consulte query para obtener más información.

stats

Documento

Opcional

stats para la consulta si explain se ejecutó con executionStats allPlansExecution verbosidad o.

La respuesta de explicación contiene información sobre cómo se ejecutó la consulta internamente. El args campo incluye los siguientes detalles:

  • Tipo de consulta

  • Un ejemplo de resumen estructurado para cada tipo de consulta

  • Opciones de consulta en el resumen estructurado

Las siguientes secciones describen los tipos de consulta y los campos en los resúmenes estructurados:

WrappedKnnQuery

Una consulta contenedora utilizada para la búsqueda vectorial de ANN que combina varias consultas. El resumen estructurado incluye detalles sobre la siguiente opción:

Campo
Tipo
Necesidad
Descripción

query

Arreglo

Requerido

Matriz de subconsultas utilizadas en la búsqueda vectorial, que normalmente contiene KnnFloatVectorQuery y DocAndScoreQuery.

KnnFloatVectorQuery

Un tipo de consulta específico para la búsqueda de ANN en vectores de coma flotante. El resumen estructurado incluye detalles sobre las siguientes opciones:

Campo
Tipo
Necesidad
Descripción

field

String

Requerido

La ruta de campo vectorial que se está buscando.

k

entero

Requerido

Número de vecinos más cercanos a recuperar.

DocAndScoreQuery

Un tipo de consulta que gestiona la coincidencia y puntuación de documentos. El resumen estructurado suele incluir estadísticas sobre la ejecución de la consulta.

ExactVectorSearchQuery

Un tipo de query para búsquedas vectoriales ENN. El resumen estructurado incluye detalles sobre las siguientes opciones:

Campo
Tipo
Necesidad
Descripción

field

String

Requerido

La ruta de campo vectorial que se está buscando.

similarityFunction

String

Requerido

La función de similitud utilizada (dotProduct, cosine o euclidean).

filter

Documento

Opcional

Consulta de prefiltro que limita el alcance de la búsqueda vectorial.

BooleanQuery

Si utiliza un prefiltro en su consulta de búsqueda vectorial, los resultados de la explicación incluirán el BooleanQuery tipo. Para obtener más información sobre los campos de este tipo y otros tipos de consulta específicos de su consulta de prefiltro, consulte la sección "Tipos de consulta" en la página de explicación de búsqueda de MongoDB.

DefaultQuery

Las consultas que no están definidas explícitamente por otra consulta se serializan utilizando la consulta predeterminada. El resumen estructurado incluye detalles sobre la siguiente opción:

Campo
Tipo
Necesidad
Descripción

queryType

String

Requerido

Tipo de query.

La explain respuesta para los modos de verbosidad executionStats y allPlansExecution incluye un stats campo que contiene información sobre cuánto tiempo pasa una consulta en varias etapas de ejecución de la consulta.

El desglose de tiempos describe las estadísticas de ejecución correspondientes a las áreas de ejecución de consultas. Los siguientes campos muestran el desglose de tiempos:

Campo
Tipo
Descripción

millisElapsed

Long

Tiempo aproximado de reloj transcurrido al realizar tareas en esta área, incluyendo el tiempo que los elementos secundarios de la consulta pasaron en ella. El valor es el número aproximado de milisegundos transcurridos al realizar tareas en esta área.

invocationCounts

Documento

Número de invocaciones de las tareas incluidas en esta área. El valor corresponde a la correspondencia entre los nombres de las tareas y su número de invocaciones.

Hay estadísticas disponibles para las siguientes áreas de consulta:

Opción
Descripción

context

Estadísticas relacionadas con la ejecución de la consulta de búsqueda vectorial. Hay dos tareas cuyos recuentos de invocación se enumeran en esta área:

createScorer

El evaluador itera sobre los documentos y genera una puntuación para cada documento. Las invocaciones de createScorer crean el objeto responsable de la puntuación. Observa que el tiempo asociado a esta tarea no es tiempo dedicado realmente a puntuar documentos. El recuento incluye el número de invocaciones de scorerSupplier.

createWeight

El peso almacena el estado asociado con una consulta y IndexSearcher. El recuento incluye el número de invocaciones createWeight.

El tiempo empleado en esta área está relacionado con la estructura de la consulta y no se basa en la cantidad de resultados que se iteran y puntúan.

Por ejemplo:

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

match

Estadísticas relacionadas con la iteración y la coincidencia de documentos de resultados. Esta estadística muestra el tiempo necesario para determinar cuál documento es la siguiente coincidencia. El tiempo dedicado a la coincidencia de resultados puede variar significativamente según la naturaleza de la consulta. Hay dos tareas cuyos recuentos de invocación se enumeran en esta área:

nextDoc

Solicitudes para avanzar al siguiente documento del conjunto de resultados. Esto implica identificar y superar saltos u otras tareas necesarias para encontrar la siguiente coincidencia. El recuento incluye el número de invocaciones nextDoc y advance.

refineRoughMatch

Realiza una coincidencia más exhaustiva. Algunas consultas se ejecutan en un proceso de dos fases: primero se realiza una coincidencia aproximada de un documento y, después, se verifica con una segunda fase más exhaustiva solo después de verificar la primera coincidencia aproximada. La tarea refineRoughMatch es la segunda fase del proceso de dos fases. El recuento incluye el número de invocaciones refineRoughMatch.

Por ejemplo:

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

score

Estadísticas relacionadas con la puntuación de documentos en el conjunto de resultados. Hay dos tareas cuyos recuentos de invocación se enumeran en esta área:

score

Califica cada documento del conjunto de resultados. El recuento incluye el número de score invocaciones.

setMinCompetitiveScore

Ignora los documentos cuya puntuación es inferior al valor especificado. Indica que una consulta podría haber reducido el número de operaciones de puntuación realizadas al ignorar los documentos con puntuaciones inferiores a un umbral no competitivo. El recuento incluye el número de invocaciones setMinCompetitiveScore.

Por ejemplo:

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

El documento resourceUsage muestra el recurso utilizado para ejecutar la consulta. Contiene los siguientes campos:

Campo
Tipo
Necesidad
Propósito

majorFaults

Long

Requerido

Número de errores de página importantes que ocurren cuando el sistema no puede encontrar los datos necesarios en la memoria, lo que da como resultado la lectura desde el almacenamiento de respaldo, como el disco, durante la ejecución de la consulta.

minorFaults

Long

Requerido

Número de fallos menores de página, que ocurren cuando los datos están en la caché de páginas, pero aún no se han mapeado a la tabla de páginas del proceso.

userTimeMs

Long

Requerido

Cantidad de tiempo de CPU, en milisegundos, empleado en el espacio del usuario.

systemTimeMs

Long

Requerido

Cantidad de tiempo de CPU, en milisegundos, empleado en el espacio del sistema.

maxReportingThreads

entero

Requerido

Número máximo de subprocesos que mongot usaron durante la ejecución de la consulta en todos los lotes. Para consultas de explicación no concurrentes, el valor es 1.

numBatches

entero

Requerido

Número total de lotes que se solicitaron mongot al procesar la consulta.

La matriz vectorTracing contiene una lista de objetos, uno por documento, que tiene los siguientes detalles sobre los vectores en el documento:

Campo
Tipo
Necesidad
Propósito

visited

Booleano

Requerido

Bandera que especifica si el vector rastreado fue visitado durante la ejecución de la consulta.

dropReason

String

Condicional

Motivo de la eliminación del vector. Esto solo ocurre si se visitó el vector y se eliminó de los resultados. El valor puede ser:

  • Merge

  • NonCompetitiveScore

  • Filter

  • Rescoring

vectorSearchScore

Double

Condicional

Puntuación asociada al vector. Esta puntuación solo está presente si se visitó el vector.

luceneSegment

entero

Requerido

Número de segmento de Lucene al que pertenece el vector. Para más información,luceneVectorSegmentStats consulte.

unreachable

Booleano

Condicional

Indicador que especifica si el vector es inalcanzable. Solo está presente si el vector es inalcanzable.

La luceneVectorSegmentStats matriz de objetos contiene un desglose de la ejecución de la $vectorSearch consulta por segmento de Lucene. Cada segmento se identifica mediante un número e incluye los parámetros que describen los detalles de la ejecución de la consulta.

{
"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
Necesidad
Propósito

executionType

String

Requerido

La estrategia de ejecución. El valor puede ser uno de los siguientes:

  • Approximate

  • Exact

  • ApproximateToExactFallback

approximateStage

Float

Condicional

Tiempo (en milisegundos) de la fase aproximada. Esto se devuelve solo para los tipos de ejecución Approximate y ApproximateFallbackToExact.

exactStage

Float

Condicional

Tiempo (en milisegundos) de la fase exacta. Este valor se devuelve solo para los tipos de ejecución Exact y ApproximateFallbackToExact.

filterMatchedDocsCount

entero

Opcional

La cantidad de documentos que coincidieron con el filtro de consulta si especificó un prefiltro en la consulta.

docCount

entero

Requerido

Número total de documentos en el segmento.

Los siguientes ejemplos utilizan el explain método en consultas ANN y ENN de ejemplo. Si desea ejecutar los siguientes ejemplos en su propio entorno, primero debe completar la Guía de inicio rápido de búsqueda vectorial de mongosh MongoDB con.

El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda vectorial ANN y ENN para el plot_embedding_voyage_3_large campo con el allPlansExecution modo de verbosidad.

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 })
}

El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda vectorial ANN y ENN para el plot_embedding_voyage_3_large campo con el queryPlanner modo de verbosidad.

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 })
}

El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda vectorial ANN y ENN para el plot_embedding_voyage_3_large campo con el executionStats modo de verbosidad.

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 })
}

Volver

Referencia de query

En esta página