Cuando ejecutas una query de MongoDB Vector Search con el método explain, la query devuelve un documento BSON que contiene el plan del query y estadísticas de ejecución que describen cómo se ejecutó la query internamente.
Sintaxis
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>] } } } ])
nivel de verbosidad
El nivel 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 menor a mayor nivel de verbosidad:
Información sobre el plan del query, incluyendo los campos | |
Información sobre el plan del query, incluidos los campos | |
queryPlanner (por defecto) | Información sobre el plan del query. No incluye los campos |
Explique los resultados
El método explain devuelve un documento BSON con los siguientes campos.
Opción | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Opcional | Describe las estadísticas de ejecución para el recopilador. |
| Documento | Opcional | Contiene metadatos útiles. |
| Documento | Opcional | Describe las estadísticas de ejecución de la query. Esto no está presente en el nivel superior para |
| Documento | Opcional | Detalles relacionados con la recuperación de datos por documento después de la ejecución de la query. Esto no se devuelve para el |
| Documento | Opcional | Detalla el uso de recursos de la query cuando se ejecutó. Esto no se devuelve para el nivel de verbosidad |
| Arreglo de objetos | Opcional | Detalles de rastreo, tales como los siguientes, acerca de los vectores en los documentos especificados:
|
| Arreglo de objetos | Opcional | Detalles por segmento de Lucene de la ejecución de la query |
collectors
El collectors es un documento BSON con el siguiente campo:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Requerido | Estadísticas de todos los recolectores de la consulta. Las estadísticas que se muestran representan el valor máximo de todos los recolectores utilizados en la consulta o la suma de las estadísticas de todos los subrecolectores. Las estadísticas de tiempo se suman para reflejar el tiempo total empleado en todos los recolectores para toda la consulta. Para obtener más información, consulte |
allCollectorStats
El allCollectorStats es un documento BSON que describe las estadísticas de los colectores en todos los colectores especificados en la query. Contiene las siguientes claves:
Campo | Descripción |
|---|---|
| Rastrea la duración y el número de resultados recogidos por el recolector. |
| Estadísticas que rastrean la duración total y el número de veces que se solicitó un |
| Estadísticas que rastrean la duración total y la cantidad de veces que un anotador fue configurado en el recolector. |
metadata
El metadata contiene metadatos útiles, como los siguientes:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| String | Opcional | Versión actual de |
| String | Opcional | Etiqueta legible por humanos que identifica el |
| String | Opcional | Índice de búsqueda vectorial MongoDB utilizado en la query. |
| Documento | Opcional | Opciones de cursor otorgadas a |
| entero | Opcional | Número total de documentos en el índice, incluidos los documentos eliminados. |
query
La respuesta explain es un documento BSON con claves y valores que describen las estadísticas de ejecución de la consulta. El documento explain en el conjunto de resultados contiene los siguientes campos:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| string | Opcional | Ruta al campo de incrustación consultado, solo si no es el raíz. |
| string | Requerido | Nombre del tipo de query de búsqueda vectorial. Consulta |
| Documento | Requerido | Información de la query de búsqueda vectorial. Consulta |
| Documento | Opcional |
|
args
La respuesta de explicación contiene información sobre cómo se ejecutó internamente la consulta. El campo args incluye los siguientes detalles:
Tipo de query
Un ejemplo de resumen estructurado para cada tipo de query
Opciones de consulta en el resumen estructurado
Las secciones siguientes describen los tipos de query y los campos de los resúmenes estructurados:
WrappedKnnQueryUna consulta contenedor utilizada para la búsqueda vectorial ANN que combina varias consultas. El resumen estructurado incluye detalles sobre las siguientes opciones:
CampoTipoNecesidadDescripciónqueryArreglo
Requerido
Arreglo de subconsultas utilizadas en la búsqueda vectorial, que suelen contener
KnnFloatVectorQueryyDocAndScoreQuery.
KnnFloatVectorQueryUn tipo de query específico para la búsqueda ANN en vectores de punto flotante. El resumen estructurado incluye detalles sobre las siguientes opciones:
CampoTipoNecesidadDescripciónfieldString
Requerido
La ruta de campo vectorial que se está buscando.
kentero
Requerido
Número de vecinos más cercanos para recuperar.
DocAndScoreQueryUn tipo de query que gestiona la coincidencia y puntuación de documentos. El resumen estructurado generalmente incluye estadísticas sobre la ejecución de la query.
ExactVectorSearchQueryUn tipo de query para búsquedas de vectores ENN. El resumen estructurado incluye detalles sobre las siguientes opciones:
CampoTipoNecesidadDescripciónfieldString
Requerido
La ruta de campo vectorial que se está buscando.
similarityFunctionString
Requerido
La función de similitud utilizada (
dotProduct,cosineoeuclidean).filterDocumento
Opcional
query previa que limita el alcance de la búsqueda vectorial.
BooleanQuerySi utiliza un prefiltro en su consulta de búsqueda vectorial, los resultados de la explicación incluirán el tipo
BooleanQuery. Para obtener más información sobre los campos de este tipo y otros tipos de consulta específicos de su consulta con prefiltro, consulte la sección Tipos de consulta en la página Explicación de búsqueda de MongoDB.
stats
La respuesta explain para los modos de verbosidad executionStats y allPlansExecution incluye un campo stats que contiene información sobre cuánto tiempo pasa una consulta en las distintas etapas de la ejecución de la consulta.
Desglose por tiempo
El desglose de temporización describe estadísticas de ejecución pertinentes a una áreas de query ejecución. Los siguientes campos muestran el desglose temporal:
Campo | Tipo | Descripción |
|---|---|---|
| Long | Tiempo aproximado transcurrido en tiempo real al realizar tareas en esta área, incluyendo el tiempo que los procesos secundarios de la consulta permanecieron en ella. El valor representa el número aproximado de milisegundos transcurridos durante la ejecución de las tareas en esta área. |
| Documento |
Áreas de Consulta
Las estadísticas están disponibles para las siguientes áreas de query:
Opción | Descripción | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Estadísticas relacionadas con la ejecución de la query de búsqueda vectorial. Hay dos tareas cuyos recuentos de convocación se enumeran en esta área:
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 procesan y puntúan. Por ejemplo: | |||||||||||
| Estadísticas relacionadas con la iteración y la coincidencia de documentos de resultados. Esta estadística muestra el tiempo que requiere determinar qué documento es la siguiente coincidencia. El tiempo dedicado a comparar resultados puede variar significativamente dependiendo de la naturaleza de la query. En esta área se enumeran dos tareas cuyos recuentos de invocación son:
Por ejemplo: | |||||||||||
| Estadísticas relacionadas con la puntuación de los documentos en el conjunto de resultados. Hay dos tareas cuyos recuentos de invocación se enumeran en esta área:
Por ejemplo: |
resourceUsage
El documento resourceUsage muestra el recurso utilizado para ejecutar la query. Contiene los siguientes campos:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Long | Requerido | Número de fallos de página mayores, que ocurren cuando el sistema no puede encontrar los datos requeridos en la memoria, lo que resulta en la lectura desde el almacén de respaldo, como el disco, durante la ejecución de la query. |
| 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. |
| Long | Requerido | Cantidad de tiempo de CPU, en milisegundos, pasado en espacio de usuario. |
| Long | Requerido | Cantidad de tiempo de CPU, en milisegundos, utilizado en el espacio del sistema. |
| entero | Requerido | Número máximo de hilos que |
| entero | Requerido | Cantidad total de lotes que se solicitaron |
vectorTracing
El arreglo vectorTracing contiene una lista de objetos, uno por documento, que tiene la siguiente información sobre los vectores en el documento:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Booleano | Requerido | Indicador que especifica si el vector rastreado fue visitado durante la ejecución de la query. |
| String | Condicional | Razón para dejar caer el vector. Esto solo está presente si el vector fue visitado y descartado de los resultados. El valor puede ser:
|
| Double | Condicional | Puntuación asociada al vector. Esto está presente solo si se visitó el vector |
| entero | Requerido | Número de segmento de Lucene al que pertenece el vector. Para obtener más información, consulte |
| Booleano | Condicional | Indicador que especifica si el vector es inalcanzable. Esto solo está presente si el vector es inalcanzable. |
luceneVectorSegmentStats
El luceneVectorSegmentStats arreglo de objetos contiene el desglose por segmento de Lucene de la ejecución de la query $vectorSearch. Cada segmento se identifica con un número e incluye los parámetros que describen los detalles de ejecución de la 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 | Necesidad | Propósito |
|---|---|---|---|
| String | Requerido | La estrategia de ejecución. El valor puede ser uno de los siguientes:
|
| Float | Condicional | Tiempo (en milisegundos) para la fase aproximada. Esto solo se devuelve para los tipos de ejecución |
| Float | Condicional | Tiempo (en milisegundos) para la fase Exacta. Esto solo se devuelve para los tipos de ejecución |
| entero | Opcional | El número de documentos que coinciden con el filtro de la query si se ha especificado un prefiltro en la query. |
| entero | Requerido | Número total de documentos en el segmento. |
Ejemplos
Los siguientes ejemplos utilizan el método explain en consultas ANN y ENN de muestra. 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 MongoDB utilizando mongosh.
allPlansExecution
El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda vectorial ANN y ENN para el campo plot_embedding_voyage_3_large con el modo de verbosidad 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 }) }
queryPlanner
El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda vectorial ANN y ENN para el campo plot_embedding_voyage_3_large con el modo de verbosidad 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 }) }
executionStats
El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda vectorial ANN y ENN para el campo plot_embedding_voyage_3_large con el modo de verbosidad 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 }) }