Docs Menu
Docs Home
/ /

Ejecuta una query de búsqueda vectorial en MongoDB

En esta guía, aprenderá a realizar búsquedas en sus documentos mediante la función de búsqueda vectorial de MongoDB. La biblioteca PHP le permite realizar consultas de búsqueda vectorial de MongoDB mediante... Constructor de agregaciones.

Para obtener más información sobre MongoDB Vector Search, consulte Descripción general de la búsqueda vectorial de MongoDB. La implementación de la búsqueda vectorial de MongoDB para la biblioteca PHP utiliza internamente... $vectorSearch Operador de agregación para realizar consultas. Para obtener más información sobre este operador, consulte la referencia de $vectorSearch en la documentación de Atlas.

Nota

MongoDB búsqueda

Para realizar búsquedas avanzadas de texto completo en sus documentos, puede usar la API de búsqueda de MongoDB. Para obtener más información sobre esta función, consulte la guía "Ejecutar una consulta de búsqueda de MongoDB".

Para poder realizar consultas de búsqueda vectorial de MongoDB, debe crear un índice de búsqueda vectorial de MongoDB en su colección. Para obtener más información sobre cómo crear este tipo de índice, consulte la guía de índices de búsqueda de MongoDB.

Importe las siguientes clases a su aplicación para realizar consultas de búsqueda vectorial de MongoDB mediante el generador de agregación:

use MongoDB\Builder\Pipeline;
use MongoDB\Builder\Stage;

Para crear una etapa $vectorSearch en su canal de agregación, realice las siguientes acciones:

  1. Cree una instancia Pipeline para almacenar las etapas de la canalización.

  2. Llame al método Stage::vectorSearch() para crear la etapa de búsqueda vectorial de MongoDB.

  3. Dentro del cuerpo del método vectorSearch(), especifique los criterios para su consulta vectorial.

El siguiente código demuestra la plantilla para construir consultas básicas de búsqueda vectorial de MongoDB:

$pipeline = new Pipeline(
Stage::vectorSearch(
/* MongoDB Vector Search query specifications
index: '<index name>',
path: '<path to embeddings>', ...*/
),
);

Debes pasar los siguientes parámetros al método vectorSearch():

Parameter
Tipo
Descripción

index

string

Nombre del índice de búsqueda vectorial

path

array or string

Campo que almacena incrustaciones vectoriales

queryVector

array

Representación vectorial de su consulta

limit

int

Número de resultados a retornar

En esta sección, aprenderá a realizar consultas de búsqueda vectorial de MongoDB mediante el Generador de agregación. Los ejemplos de esta sección utilizan datos de muestra de la colección sample_mflix.embedded_movies.

Nota

Longitud del vector de consulta

Para fines demostrativos, los ejemplos de esta sección utilizan vectores de consulta de ejemplo que contienen muy pocos elementos, en comparación con el vector de consulta que podría usar en una aplicación ejecutable. Para ver un ejemplo que contiene el vector de consulta completo, consulte la Guía de inicio rápido de búsqueda de vectores de MongoDB y seleccione PHP desde el menú desplegable Select your language en la esquina superior derecha de la página.

El siguiente código realiza una consulta de búsqueda vectorial de MongoDB en el campo vectorial plot_embedding:

$pipeline = new Pipeline(
Stage::vectorSearch(
index: 'vector',
path: 'plot_embedding',
queryVector: [-0.0016261312, -0.028070757, -0.011342932],
numCandidates: 150,
limit: 5,
),
Stage::project(
_id: 0,
title: 1,
),
);
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"title":"Thrill Seekers"}
{"title":"About Time"}
{"title":"Timecop"}
// Results truncated

El siguiente código realiza la misma consulta que en el ejemplo anterior, pero genera solo el campo title y el metacampo vectorSearchScore, que describe qué tan bien coincide el documento con el vector de consulta:

$pipeline = new Pipeline(
Stage::vectorSearch(
index: 'vector',
path: 'plot_embedding',
queryVector: [-0.0016261312, -0.028070757, -0.011342932],
numCandidates: 150,
limit: 5,
),
Stage::project(
_id: 0,
title: 1,
score: ['$meta' => 'vectorSearchScore'],
),
);
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"title":"Thrill Seekers","score":0.927734375}
{"title":"About Time","score":0.925750732421875}
{"title":"Timecop","score":0.9241180419921875}
// Results truncated

Puede usar el método vectorSearch() para realizar diversos tipos de consultas de búsqueda vectorial de MongoDB. Según la consulta deseada, puede pasar los siguientes parámetros opcionales a vectorSearch():

Parámetro opcional
Tipo
Descripción
Valor por defecto

exact

bool

Especifica si se debe ejecutar una búsqueda de vecino más cercano exacto (true) o de vecino más cercano aproximado (false)

false

filter

QueryInterface or array

Especifica un pre-filtro para los documentos a buscar.

sin filtro

numCandidates

int or null

Especifica el número de vecinos más cercanos a utilizar durante la búsqueda

null

Para obtener más información sobre estos parámetros, consulte la sección Campos de la $vectorSearch referencia del operador en la documentación de Atlas.

Volver

MongoDB búsqueda

En esta página