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 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".
Índice de búsqueda vectorial 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.
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 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 |
|---|---|---|
|
| Nombre del índice de búsqueda vectorial |
|
| Campo que almacena incrustaciones vectoriales |
|
| Representación vectorial de su consulta |
|
| Número de resultados a retornar |
Ejemplos de consultas de búsqueda de vectores
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.
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
Puntuación de búsqueda de vectores
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
Opciones de búsqueda de vectores
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 |
|---|---|---|---|
|
| Especifica si se debe 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 a utilizar 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.