Overview
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 agregación.
Para obtener más información sobre MongoDB Vector Search, consulta la
Descripción general de MongoDB Vector Search. La implementación de MongoDB Vector Search para la librería PHP utiliza internamente el $vectorSearch operador de agregación para realizar queries. Para obtener más información sobre este operador, consulta la referencia $vectorSearch en la documentación de Atlas.
Nota
MongoDB búsqueda
Para realizar una búsqueda avanzada de texto completo en tus documentos, puedes utilizar la API de búsqueda de MongoDB. Para aprender sobre esta función, consulta la guía Ejecutar una MongoDB Search query.
Índice de búsqueda vectorial de MongoDB
Antes de ejecutar queries de Búsqueda Vectorial de MongoDB, debes crear un índice de Búsqueda Vectorial de MongoDB en tu colección. Para obtener más información sobre cómo crear este tipo de índice, consulta la guía Índices de búsqueda de MongoDB.
Etapa de agregación de búsqueda vectorial
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:
Cree una instancia
Pipelinepara almacenar las etapas de la canalización.Llame al método
Stage::vectorSearch()para crear la etapa de búsqueda vectorial de MongoDB.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 MongoDB Vector Search:
$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 |
|---|---|---|
|
| Nombre del índice de búsqueda vectorial |
|
| Campo que almacena incrustaciones vectoriales |
|
| Representación vectorial de su query |
|
| Número de resultados a retornar |
Ejemplos de queries de búsqueda vectorial
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
Con fines demostrativos, los ejemplos de esta sección utilizan vectores de query de muestra que contienen muy pocos elementos, en comparación con el vector de query que podrías utilizar en una aplicación ejecutable. Para ver un ejemplo que contenga el vector de query de longitud completa, consulte Inicio rápido de búsqueda vectorial de MongoDB y seleccione PHP desde el menú desplegable Select your language en la esquina superior derecha de la página.
Consulta de búsqueda básica de vectores
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
Puntaje de búsqueda vectorial
El siguiente código realiza la misma query que en el ejemplo anterior, pero sólo muestra el campo title y el campo meta vectorSearchScore, que describe qué tan bien se ajusta el documento al vector de query:
$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
Opciones de búsqueda de vectores
Puedes usar el método vectorSearch() para realizar muchos tipos de MongoDB Vector Search queries. Dependiendo de la query que desees realizar, puedes pasar los siguientes parámetros opcionales a vectorSearch():
Parámetro opcional | Tipo | Descripción | Valor por defecto |
|---|---|---|---|
|
| Especifica si se ejecutar una búsqueda de Vecino Más Cercano Exacto ( |
|
|
| Especifica un pre-filtro para los documentos a buscar. | sin filtro |
|
| Especifica el número de vecinos más cercanos que se usarán durante la búsqueda |
|
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.