Overview
En esta guía, puedes aprender cómo usar la funcionalidad Laravel Scout en tu aplicación Laravel MongoDB. Scout te permite implementar la búsqueda de texto completo en tus modelos Eloquent. Para aprender más, consulta 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
Utiliza el Generador de esquemas para crear índices de búsqueda
Si tus documentos ya están en MongoDB, crea índices de búsqueda utilizando la MongoDB PHP librería 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).
Agrega el atributo Searchable a tu 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.
Configurando Scout en tu aplicación
Asegúrate de que tu aplicación esté configurada para utilizar MongoDB como su conexión de base de datos. Para aprender cómo configurar MongoDB, consulta la sección Configura tu conexión de 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. Pega 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 archivo config/scout.php, también puede especificar una definición personalizada de índice de búsqueda de MongoDB. Para obtener más información, consulta 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 establecer tu controlador de búsqueda predeterminado, puedes crear tu colección buscable e índice de búsqueda ejecutando el siguiente comando desde el directorio raíz de tu aplicación:
php artisan scout:index 'App\Models\Movie'
Dado que has configurado MongoDB como el driver de búsqueda por defecto, el comando anterior crea la colección de búsqueda con un índice MongoDB Search en tu base de datos MongoDB. La colección se llama scout_movies, en función del prefijo establecido en el paso anterior. El índice MongoDB Search se llama scout y tiene la siguiente configuración por defecto:
{ "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 saber más sobre cómo definir definiciones de índice de MongoDB Search, consulta la guía definir mapeos 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
Puedes utilizar Scout para replicar datos de una colección de origen modelada por tu modelo de Eloquent en una colección que se pueda buscar. 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.