Overview
En esta guía, aprenderá a usar la función Laravel Scout en su aplicación Laravel MongoDB. Scout le permite implementar la búsqueda de texto completo en sus modelos Eloquent. Para obtener más información, consulte Laravel Scout en la documentación de Laravel.
La integración de Scout para Laravel MongoDB ofrece la siguiente funcionalidad:
Proporciona una abstracción para crear Índices de MongoDB Search desde cualquier modelo MongoDB o SQL.
Importante
Utilice el generador de esquemas para crear índices de búsqueda
Si sus documentos ya están en MongoDB, cree índices de búsqueda utilizando la biblioteca PHP de MongoDB o
Schemamétodos del generador para mejorar el rendimiento de las consultas de búsqueda. Para obtener más información sobre la creación de índices de búsqueda, consulte el Cree un índice de búsqueda de MongoDB sección de la guía de búsqueda de MongoDB.Le permite replicar automáticamente datos de MongoDB en un motor de búsqueda como Meilisearch o Algolia. Puede usar un modelo Eloquent de MongoDB como fuente para importar e indexar. Para obtener más información sobre la indexación en un motor de búsqueda, consulta la sección Indexación de la documentación de Laravel Scout.
Importante
Compatibilidad de implementación
Solo puedes utilizar Laravel Scout cuando te conectas a implementaciones MongoDB Atlas. Esta funcionalidad no está disponible para implementaciones autogestionados.
Scout para MongoDB Search Tutorial
Este tutorial demuestra cómo utilizar Scout para agrupar e indexar documentos para MongoDB Search desde modelos Eloquent (MongoDB o SQL).
Agregue el rasgo de búsqueda a su modelo
Agregar el rasgo Laravel\Scout\Searchable a un modelo de Eloquent para hacerlo indexable. El siguiente ejemplo añade esta característica al modelo Movie, que representa documentos en la colección sample_mflix.movies:
namespace App\Models; use MongoDB\Laravel\Eloquent\Model; use Laravel\Scout\Searchable; class Movie extends Model { use Searchable; protected $connection = 'mongodb'; }
También puedes utilizar el atributo Searchable para reformatear documentos, insertar documentos relacionados o transformar valores de documentos. Para obtener más información, consulta la sección Configurando datos buscables de la documentación de Laravel Scout.
Configurar Scout en tu aplicación
Asegúrese de que su aplicación esté configurada para usar MongoDB como conexión a la base de datos. Para saber cómo configurar MongoDB, consulte la sección "Configurar su conexión a MongoDB" de la guía de inicio rápido.
Para configurar Scout en su aplicación, cree un archivo llamado scout.php en el directorio config de su aplicación. Pegue el siguiente código en el archivo para configurar Scout:
return [ 'driver' => env('SCOUT_DRIVER', 'mongodb'), 'mongodb' => [ 'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'), ], 'prefix' => env('SCOUT_PREFIX', 'scout_'), ];
El código anterior especifica la siguiente configuración:
Utiliza el valor de la variable de entorno
SCOUT_DRIVERcomo driver de búsqueda por defecto, omongodbsi la variable de entorno no está configuradaEspecifica
scout_como prefijo para el nombre de la colección de la colección búsqueda.
En el config/scout.php archivo, también puede especificar una definición de índice de búsqueda de MongoDB personalizada. Para obtener más información, consulte el ejemplo de definición de índice personalizado en el siguiente paso.
Establezca la siguiente variable de entorno en el archivo .env de su aplicación para seleccionar mongodb como el controlador de búsqueda por defecto:
SCOUT_DRIVER=mongodb
Tip
En cola
Cuando uses Scout, considera configurar un controlador de cola para reducir los tiempos de respuesta en la interfaz web de la aplicación. Para aprender más, consulta la sección de Colas de la documentación de Laravel Scout y la guía de Colas.
Crear el índice de MongoDB Search
Después de configurar Scout y configurar su controlador de búsqueda predeterminado, puede crear su colección de búsqueda y su índice de búsqueda ejecutando el siguiente comando desde el directorio raíz de su aplicación:
php artisan scout:index 'App\Models\Movie'
Dado que ha configurado MongoDB como controlador de búsqueda predeterminado, el comando anterior crea la colección de búsqueda con un índice de búsqueda de MongoDB en su base de datos MongoDB. La colección se llama scout_movies, basándose en el prefijo establecido en el paso anterior. El índice de búsqueda de MongoDB se llama scout y tiene la siguiente configuración predeterminada:
{ "mappings": { "dynamic": true } }
Para personalizar la definición del índice, añade la configuración index-definitions a la entrada mongodb en tu archivo config/scout.php. El siguiente código muestra cómo especificar una definición personalizada de índice para crear en la colección scout_movies:
'mongodb' => [ 'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'), 'index-definitions' => [ 'scout_movies' => [ 'mappings' => [ 'dynamic' => false, 'fields' => ['title' => ['type' => 'string']] ] ] ] ], ...
Para obtener más información sobre cómo definir definiciones de índices de búsqueda de MongoDB, consulte la guía Definir asignaciones de campos en la documentación de Atlas.
Nota
MongoDB puede tardar hasta un minuto en crear y finalizar un índice de búsqueda de MongoDB, por lo que el comando scout:index podría no devolver inmediatamente un mensaje de éxito.
Importa datos en la colección que se puede buscar
Puede usar Scout para replicar datos de una colección de origen modelada por su modelo Eloquent en una colección con capacidad de búsqueda. El siguiente comando replica e indexa datos de la colección movies en la colección scout_movies indexada en el paso anterior:
php artisan scout:import 'App\Models\Movie'
Los documentos se indexan automáticamente para las consultas de MongoDB Search.
Tip
Selecciona los campos a importar
Es posible que no se necesiten todos los campos de los documentos fuente en la colección buscable. Limitar la cantidad de datos que replicas puede mejorar la velocidad y el rendimiento de tu aplicación.
Puedes seleccionar campos específicos para importar definiendo el método toSearchableArray() en tu clase de modelo Eloquent. El siguiente código demuestra cómo definir toSearchableArray() para seleccionar solo los campos plot y title para la replicación:
class Movie extends Model { .... public function toSearchableArray(): array { return [ 'plot' => $this->plot, 'title' => $this->title, ]; } }
Después de completar estos pasos, puede realizar consultas MongoDB Search en la colección scout_movies de su aplicación Laravel MongoDB. Para aprender cómo realizar búsquedas de texto completo con MongoDB Search, consulta la guía MongoDB Search.