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 proporciona 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 de creación 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 Sección Cree un índice de búsqueda de MongoDB de la guía de búsqueda de MongoDB.

  • Permite replicar automáticamente datos de MongoDB en un motor de búsqueda como Meilisearch o Algolia. Puedes usar un modelo de MongoDB Eloquent 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 usar Laravel Scout al conectarte a implementaciones de MongoDB Atlas. Esta función no está disponible para implementaciones autogestionadas.

Este tutorial demuestra cómo utilizar Scout para componer 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

Agregue el atributo Laravel\Scout\Searchable a un modelo de Eloquent para que sea buscable. El siguiente ejemplo agrega este atributo al modelo Movie, que representa los documentos de 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 usar el Searchable atributo para reformatear documentos, incrustar documentos relacionados o transformar valores de documentos. Para obtener más información, consulta la sección "Configuración de datos de búsqueda" 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:

configuración/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 controlador de búsqueda predeterminado, o mongodb si la variable de entorno no está configurada

  • Especifica scout_ como prefijo para el nombre de la colección de 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 predeterminado:

.env
SCOUT_DRIVER=mongodb

Tip

Hacer cola

Al usar Scout, considere configurar un controlador de colas para reducir los tiempos de respuesta de la interfaz web de su aplicación. Para obtener más información, consulte la sección "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 es posible que el comando scout:index no devuelva un mensaje de éxito inmediatamente.

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 búsqueda de MongoDB.

Tip

Seleccionar campos para importar

Es posible que no necesite todos los campos de sus documentos fuente en su colección de búsqueda. Limitar la cantidad de datos que replica puede mejorar la velocidad y el rendimiento de su aplicación.

Puede seleccionar campos específicos para importar definiendo el método toSearchableArray() en su clase de modelo Eloquent. El siguiente código muestra 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 de MongoDB Search scout_movies en la colección de su aplicación MongoDB de Laravel. Para saber cómo realizar búsquedas de texto completo con MongoDB Search, consulte la guía de MongoDB Search.

Volver

Caché y bloqueos

En esta página