Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Explique los resultados de la búsqueda vectorial de MongoDB

Cuando ejecuta una consulta de MongoDB Vector Search con el explain método, la query devuelve un BSON documento que contiene el plan del query y las estadísticas de ejecución que describen cómo se ejecutó la consulta internamente.

Tip

comando explain

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 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 stats, que contienen estadísticas de ejecución para la query. Incluye datos de ejecución parcial capturados durante la selección del plan.

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

queryPlanner (por defecto)

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

El método explain 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 después de la ejecución de la query. Esto no se devuelve para el queryPlanner nivel de verbosidad.

resourceUsage

Documento

Opcional

Detalla el uso de recursos de la query cuando se ejecutó. Esto no se devuelve para el nivel de verbosidadqueryPlanner .

vectorTracing

Arreglo de objetos

Opcional

Detalles de rastreo, tales como los siguientes, acerca de los vectores en los documentos especificados:

luceneVectorSegmentStats

Arreglo de objetos

Opcional

Detalles por segmento de Lucene de $vectorSearch ejecución de la query.

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 query. Las estadísticas reportadas representan ya sea el valor máximo de todos los colectores utilizados en la query o la suma de la estadística de todos los sub-colectores. Las estadísticas de tiempo se suman para reflejar el tiempo total empleado por todos los recopiladores en toda la query. Para obtener más información, consulta allCollectorStats.

El allCollectorStats es un BSON documento que describe las estadísticas de colectores en todos los recolectores especificados en la query. Incluye las siguientes claves:

Campo
Descripción

collect

Rastrea la duración y el número de resultados recogidos por el recolector.

competitiveIterator

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

setScorer

Estadísticas que rastrean la duración total y la cantidad de veces que un anotador fue configurado en el recolector.

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 mongot host.

indexName

String

Opcional

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

cursorOptions

Documento

Opcional

Opciones de cursor otorgadas a mongot.

totalLuceneDocs

entero

Opcional

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

La respuesta explain es un documento BSON con claves y valores que describen las estadísticas de ejecución de la query. El documento explain en el 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 el raíz.

type

string

Requerido

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

args

Documento

Requerido

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

stats

Documento

Opcional

stats para la query si explain se ejecutó con executionStats o allPlansExecution nivel de verbosidad.

La explicación de la respuesta contiene información sobre cómo se ejecutó la consulta internamente. 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:

WrappedKnnQuery

Una query contenedor utilizada para la búsqueda de vectores ANN que combina múltiples queries. El resumen estructurado incluye detalles sobre la siguiente opción:

Campo
Tipo
Necesidad
Descripción

query

Arreglo

Requerido

Arreglo de subconsultas utilizadas en la búsqueda vectorial, que suelen contener KnnFloatVectorQuery y DocAndScoreQuery.

KnnFloatVectorQuery

Un tipo de query específico para la búsqueda de ANN en vectores flotantes. 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 para recuperar.

DocAndScoreQuery

Un 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.

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

query previa 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 con prefiltro, consulte la sección Tipos de consulta en la página 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 por defecto. El resumen estructurado incluye detalles sobre la siguiente opción:

Campo
Tipo
Necesidad
Descripción

queryType

String

Requerido

Tipo de query.

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

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

millisElapsed

Long

Tiempo aproximado transcurrido según el reloj de pared realizando tareas en esta área, incluyendo la cantidad de tiempo que los hijos de la query pasaron en esta área. El valor es el número aproximado de milisegundos transcurridos mientras se realizaban tareas en esta área.

invocationCounts

Documento

Cantidad de veces que se ejecutaron las tareas incluidas en esta área. El valor es un mapa de nombres de tareas con su recuento de invocaciones.

Las estadísticas están disponibles para las siguientes áreas de query:

Opción
Descripción

context

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:

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

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

El tiempo empleado en esta área está relacionado con la estructura de la query y no se basa en la cantidad de resultados que se hayan iterado y calificado.

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 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:

nextDoc

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

refineRoughMatch

Realiza una coincidencia más exhaustiva. Algunas queries se ejecutan en un proceso de dos fases en el que un documento se "empareja" primero de manera aproximada y, después de cumplir con este primer emparejamiento, se verifica en una segunda fase más exhaustiva. La tarea refineRoughMatch es la segunda fase del proceso de dos fases. El recuento incluye el número de invocaciones de refineRoughMatch.

Por ejemplo:

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

score

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:

score

Califica cada documento en el conjunto de resultados. El conteo incluye el número de invocaciones de score.

setMinCompetitiveScore

Ignora los documentos cuya puntuación es inferior al valor dado. Indica que una query puede haber podido reducir el número de operaciones de puntuación realizadas al ignorar los documentos con puntuaciones por debajo de algún umbral no competitivo. El conteo 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 query. Contiene los siguientes campos:

Campo
Tipo
Necesidad
Propósito

majorFaults

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.

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, pasado en espacio de usuario.

systemTimeMs

Long

Requerido

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

maxReportingThreads

entero

Requerido

Número máximo de hilos que mongot usó durante la ejecución de la query en todos los lotes. Para consultas Explain no concurrentes, el valor es 1.

numBatches

entero

Requerido

Cantidad total de lotes que se solicitaron mongot al realizar el procesamiento de la query.

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

visited

Booleano

Requerido

Indicador que especifica si el vector rastreado fue visitado durante la ejecución de la query.

dropReason

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:

  • Merge

  • NonCompetitiveScore

  • Filter

  • Rescoring

vectorSearchScore

Double

Condicional

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

luceneSegment

entero

Requerido

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

unreachable

Booleano

Condicional

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

El luceneVectorSegmentStats arreglo de objetos contiene la desglose por segmento de Lucene de la ejecución de la $vectorSearch query. 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

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) para la fase aproximada. Esto solo se devuelve para los tipos de ejecución Approximate y ApproximateFallbackToExact.

exactStage

Float

Condicional

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

filterMatchedDocsCount

entero

Opcional

El número de documentos que coinciden con el filtro de query si ha especificado un prefiltro en la query.

docCount

entero

Requerido

Número total de documentos en el segmento.

Los siguientes ejemplos utilizan el método explain en ANN y ENN de muestra. Si deseas ejecutar los siguientes ejemplos en tu propio entorno, primero debes completar el MongoDB Vector Search Quick Start utilizando mongosh.

El siguiente ejemplo ejecuta el método explain en una consulta de búsqueda de vectores 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 de vectores 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 de vectores 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