Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Búsqueda de texto completo con Scout

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 Schema mé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.

Este tutorial demuestra cómo utilizar Scout para agrupar e indexar documentos para MongoDB Search desde modelos Eloquent (MongoDB o SQL).

1

Antes de poder usar Scout en su aplicación, ejecute el siguiente comando desde el directorio raíz de su aplicación para instalar el paquete laravel/scout:

composer require laravel/scout
2

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:

<?php
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.

3

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:

config/scout.php
<?php
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_DRIVER como driver de búsqueda por defecto, o mongodb si la variable de entorno no está configurada

  • Especifica 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:

.env
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.

4

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.

5

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.

Volver

Caché y bloqueos

En esta página