{"id":65857,"date":"2023-05-15T15:22:24","date_gmt":"2023-05-15T13:22:24","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=65857&#038;preview=true&#038;preview_id=65857"},"modified":"2025-01-17T13:57:52","modified_gmt":"2025-01-17T12:57:52","slug":"laravel-scout","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/","title":{"rendered":"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo"},"content":{"rendered":"<p>El <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-laravel\/\">framework Laravel<\/a> se ha convertido en un recurso de referencia para los desarrolladores que crean servicios web.<\/p>\n<p>Como herramienta de c\u00f3digo abierto, Laravel ofrece un sinf\u00edn de funcionalidades listas para usar que permiten a los desarrolladores crear aplicaciones robustas y funcionales.<\/p>\n<p>Entre sus ofertas est\u00e1 <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Scout<\/a>, una biblioteca para gestionar los \u00edndices de b\u00fasqueda de tu aplicaci\u00f3n. Su flexibilidad permite a los desarrolladores afinar las configuraciones y seleccionar entre los controladores Algolia, Meilisearch, MySQL o <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Postgres<\/a> para almacenar los \u00edndices.<\/p>\n<p>Aqu\u00ed exploraremos esta herramienta en profundidad, ense\u00f1\u00e1ndote c\u00f3mo a\u00f1adir soporte de b\u00fasqueda de texto completo a una aplicaci\u00f3n Laravel a trav\u00e9s del controlador. Modelaremos una aplicaci\u00f3n Laravel de demostraci\u00f3n para almacenar el nombre de trenes ficticios y luego usaremos Laravel Scout para a\u00f1adir una b\u00fasqueda a la aplicaci\u00f3n.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Prerrequisitos<\/h2>\n<p>Para seguir adelante, debes tener:<\/p>\n<ul>\n<li>El compilador PHP instalado en tu ordenador. Este tutorial utiliza la versi\u00f3n 8.1 de PHP.<\/li>\n<li>El motor Docker o Docker Desktop instalado en tu ordenador<\/li>\n<li>Una cuenta <a href=\"http:\/\/algolia.com\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia<\/a> en la nube, que puedes crear gratuitamente<\/li>\n<\/ul>\n\n<h2>C\u00f3mo Instalar Scout en un Proyecto Laravel<\/h2>\n<p>Para utilizar Scout, primero debes crear una aplicaci\u00f3n Laravel en la que pretendas a\u00f1adir la funcionalidad de b\u00fasqueda. El script Laravel-Scout Bash contiene los comandos para generar una aplicaci\u00f3n Laravel dentro de un contenedor Docker. Utilizar Docker significa que no necesitas instalar software de soporte adicional, como una base de datos MySQL.<\/p>\n<p>El script Laravel-scout utiliza el lenguaje de scripting Bash, por lo que debes ejecutarlo dentro de un entorno Linux. Si utilizas Windows, aseg\u00farate de <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\" target=\"_blank\" rel=\"noopener noreferrer\">configurar<\/a> el Subsistema de Windows para Linux (WSL).<\/p>\n<p>Si utilizas WSL, ejecuta el siguiente comando en tu terminal para configurar tu distribuci\u00f3n de Linux preferida.<\/p>\n<pre><code class=\"language-bash\">wsl -s ubuntu<\/code><\/pre>\n<p>A continuaci\u00f3n, navega hasta la ubicaci\u00f3n de tu ordenador en la que quieras colocar el proyecto. El script Laravel-Scout generar\u00e1 un directorio de proyecto aqu\u00ed. En el ejemplo siguiente, el script Laravel-Scout crear\u00e1 un directorio dentro del directorio <strong>desktop<\/strong>.<\/p>\n<pre><code class=\"language-bash\">cd \/desktop<\/code><\/pre>\n<p>Ejecuta el siguiente comando para ejecutar el script Laravel-Scout. Crear\u00e1 una aplicaci\u00f3n Dockerizada con el c\u00f3digo boilerplate necesario.<\/p>\n<pre><code class=\"language-bash\">curl -s https:\/\/laravel.build\/laravel-scout-app | bash<\/code><\/pre>\n<p>Tras la ejecuci\u00f3n, cambia de directorio utilizando <code>cd laravel-scout-app<\/code>. A continuaci\u00f3n, ejecuta el comando <code>sail-up<\/code> dentro de la carpeta del proyecto para iniciar los contenedores Docker de tu aplicaci\u00f3n.<\/p>\n<p><strong>Nota:<\/strong> En muchas distribuciones de Linux, puede que necesites ejecutar el comando que aparece a continuaci\u00f3n con el comando <code>sudo<\/code> para iniciar privilegios elevados.<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Es posible que te encuentres con un error:<\/p>\n<figure style=\"width: 307px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/1-port-allocated-error-1.png\" alt=\"Error al indicar que el puerto est\u00e1 asignado.\" width=\"307\" height=\"19\"><figcaption class=\"wp-caption-text\">Error al indicar que el puerto est\u00e1 asignado.<\/figcaption><\/figure>\n<p>Para resolverlo, utiliza la variable <code>APP_PORT<\/code> para especificar un puerto dentro del comando <code>sail up<\/code>:<\/p>\n<pre><code class=\"language-bash\">APP_PORT=3001 .\/vendor\/bin\/sail up<\/code><\/pre>\n<p>A continuaci\u00f3n, ejecuta el siguiente comando para ejecutar la aplicaci\u00f3n a trav\u00e9s de Artisan en el servidor PHP.<\/p>\n<pre><code class=\"language-bash\">php artisan serve<\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-with-artisan.png\" alt=\"Servir la aplicaci\u00f3n Laravel con Artisan\" width=\"1600\" height=\"387\"><figcaption class=\"wp-caption-text\">Servir la aplicaci\u00f3n Laravel con Artisan<\/figcaption><\/figure>\n<p>Desde tu navegador web, navega a la aplicaci\u00f3n en ejecuci\u00f3n en http:\/\/127.0.0.1:8000. La aplicaci\u00f3n mostrar\u00e1 la p\u00e1gina de bienvenida de Laravel en la ruta por defecto.<\/p>\n<figure style=\"width: 1328px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-application-welcome-page.png\" alt=\"P\u00e1gina de bienvenida de la aplicaci\u00f3n Laravel\" width=\"1328\" height=\"900\"><figcaption class=\"wp-caption-text\">P\u00e1gina de bienvenida de la aplicaci\u00f3n Laravel<\/figcaption><\/figure>\n<h2>C\u00f3mo A\u00f1adir Laravel Scout a la Aplicaci\u00f3n<\/h2>\n<p>En tu terminal, introduce el comando para habilitar el gestor de paquetes PHP <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a> para a\u00f1adir Laravel Scout al proyecto.<\/p>\n<pre><code class=\"language-bash\">composer require laravel\/scout<\/code><\/pre>\n<p>A continuaci\u00f3n, publica el archivo de configuraci\u00f3n de Scout utilizando el comando vendor:publish. El comando publicar\u00e1 el archivo de configuraci\u00f3n <code>scout.php<\/code> en el directorio <strong>config<\/strong> de tu aplicaci\u00f3n.<\/p>\n<pre><code class=\"language-bash\"> php artisan vendor:publish --provider=\"LaravelScoutScoutServiceProvider\"<\/code><\/pre>\n<p>Ahora, modifica el archivo boilerplate <strong>.env<\/strong> para que contenga un valor booleano <code>SCOUT_QUEUE<\/code>.<\/p>\n<p>El valor <code>SCOUT_QUEUE<\/code> permitir\u00e1 a Scout poner en cola las operaciones, proporcionando mejores tiempos de respuesta. Sin \u00e9l, los controladores de Scout como <a href=\"https:\/\/www.meilisearch.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Meilisearch<\/a> no reflejar\u00e1n los nuevos registros inmediatamente.<\/p>\n<pre><code class=\"language-bash\">SCOUT_QUEUE=true<\/code><\/pre>\n<p>Adem\u00e1s, modifica la variable <code>DB_HOST<\/code> en el archivo <strong>.env<\/strong> para que apunte a tu localhost para utilizar la <a href=\"https:\/\/kinsta.com\/es\/blog\/sqlite-vs-mysql\/\">base de datos MySQL<\/a> dentro de los contenedores Docker.<\/p>\n<pre><code class=\"language-bash\">DB_HOST=127.0.0.1<\/code><\/pre>\n<h2>C\u00f3mo Marcar un Modelo y Configurar el ndice<\/h2>\n<p>Scout no habilita por defecto los modelos de datos con opci\u00f3n de b\u00fasqueda. Debes marcar expl\u00edcitamente un modelo como buscable utilizando su rasgo <code>LaravelScoutSearchable<\/code>.<\/p>\n<p>Empezar\u00e1s creando un modelo de datos para una aplicaci\u00f3n <code>Train<\/code> de demostraci\u00f3n y marc\u00e1ndolo como buscable.<\/p>\n<h3>C\u00f3mo crear un modelo<\/h3>\n<p>Para la aplicaci\u00f3n <code>Train<\/code>, querr\u00e1s almacenar los nombres de los marcadores de posici\u00f3n de cada tren disponible.<\/p>\n<p>Ejecuta el siguiente comando de Artisan para generar la migraci\u00f3n y n\u00f3mbrala <code>create_trains_table<\/code>.<\/p>\n<pre><code class=\"language-bash\">php artisan make:migration create_trains_table <\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/migration-created.png\" alt=\"Hacer una migraci\u00f3n llamada create_trains_table\" width=\"1600\" height=\"145\"><figcaption class=\"wp-caption-text\">Hacer una migraci\u00f3n llamada create_trains_table<\/figcaption><\/figure>\n<p>La migraci\u00f3n se generar\u00e1 en un archivo cuyo nombre combina el nombre especificado y la marca de tiempo actual.<\/p>\n<p>Abre el archivo de migraci\u00f3n situado en el directorio <strong>database\/migrations\/<\/strong>.<\/p>\n<p>Para a\u00f1adir una columna de t\u00edtulo, a\u00f1ade el siguiente c\u00f3digo despu\u00e9s de la columna <code>id()<\/code> en la l\u00ednea 17. El c\u00f3digo a\u00f1adir\u00e1 una columna de t\u00edtulo.<\/p>\n<pre><code class=\"language-php\">$table-&gt;string('title');<\/code><\/pre>\n<p>Para aplicar la migraci\u00f3n, ejecuta el comando siguiente.<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/artisan-migration.png\" alt=\"Aplicar la migraci\u00f3n a Artisan\" width=\"1600\" height=\"335\"><figcaption class=\"wp-caption-text\">Aplicar la migraci\u00f3n a Artisan<\/figcaption><\/figure>\n<p>Despu\u00e9s de ejecutar las migraciones de la base de datos, crea un archivo llamado <strong>Train.php<\/strong> en el directorio <strong>app\/Models\/<\/strong>.<\/p>\n<h3>C\u00f3mo a\u00f1adir el trait LaravelScoutSearchable<\/h3>\n<p>Marca el modelo <code>Train<\/code> para la b\u00fasqueda a\u00f1adiendo el rasgo <code>LaravelScoutSearchable<\/code> al modelo, como se muestra a continuaci\u00f3n.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppModels;\nuse IlluminateDatabaseEloquentModel;\nuse LaravelScoutSearchable;\n\nclass Train extends Model\n{\n    use Searchable;\n    public $fillable = ['title'];<\/code><\/pre>\n<p>Adem\u00e1s, tienes que configurar los \u00edndices de b\u00fasqueda anulando el m\u00e9todo <code>searchable<\/code>. El comportamiento por defecto de Scout ser\u00eda persistir en el modelo para que coincida con el nombre de la tabla del modelo.<\/p>\n<p>Por lo tanto, a\u00f1ade el siguiente c\u00f3digo al archivo <strong>Train.php<\/strong> debajo del c\u00f3digo del bloque anterior.<\/p>\n<pre><code class=\"language-php\">\/**\n     * Retrieve the index name for the model.\n     *\n     * @return string\n    *\/\n    public function searchableAs()\n    {\n        return 'trains_index';\n   }\n}<\/code><\/pre>\n<h2>C\u00f3mo Utilizar Algolia con Scout<\/h2>\n<p>Para la primera b\u00fasqueda de texto completo con Laravel Scout, utilizar\u00e1s el controlador <a href=\"https:\/\/www.algolia.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia<\/a>. Algolia es una plataforma de software como servicio (SaaS) que se utiliza para buscar en grandes cantidades de datos. Proporciona un panel web para que los desarrolladores gestionen sus \u00edndices de b\u00fasqueda y una s\u00f3lida API a la que puedes acceder mediante un kit de desarrollo de software (SDK) en tu lenguaje de programaci\u00f3n preferido.<\/p>\n<p>Dentro de la aplicaci\u00f3n Laravel, utilizar\u00e1s el <a href=\"https:\/\/github.com\/algolia\/algoliasearch-client-php\" target=\"_blank\" rel=\"noopener noreferrer\">paquete cliente<\/a> Algolia para PHP.<\/p>\n<h3>C\u00f3mo configurar Algolia<\/h3>\n<p>En primer lugar, debes instalar el paquete <a href=\"https:\/\/github.com\/algolia\/algoliasearch-client-php\" target=\"_blank\" rel=\"noopener noreferrer\">cliente de b\u00fasqueda<\/a> Algolia para PHP para tu aplicaci\u00f3n.<\/p>\n<p>Ejecuta el siguiente comando.<\/p>\n<pre><code class=\"language-bash\">composer require algolia\/algoliasearch-client-php<\/code><\/pre>\n<p>A continuaci\u00f3n, debes establecer el ID de tu aplicaci\u00f3n y las credenciales secretas de la clave API de Algolia en el archivo <strong>.env<\/strong>.<\/p>\n<p>Utilizando tu navegador web, navega a tu panel de control de Algolia para obtener las credenciales de ID de Aplicaci\u00f3n y Clave Secreta de API.<\/p>\n<p>Haz clic en <strong>Settings<\/strong> en la parte inferior de la barra lateral izquierda para navegar a la p\u00e1gina de <strong>Settings<\/strong>.<\/p>\n<p>A continuaci\u00f3n, haz clic en <strong>API Keys<\/strong> dentro de la secci\u00f3n <strong>Team and Access<\/strong>\u00a0de la p\u00e1gina Configuraci\u00f3n para ver las claves de tu cuenta de Algolia.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/api-keys-algolia-cloud.png\" alt=\"P\u00e1gina de Claves API en Algolia Cloud\" width=\"1600\" height=\"1020\"><figcaption class=\"wp-caption-text\">P\u00e1gina de Claves API en Algolia Cloud<\/figcaption><\/figure>\n<p>En la p\u00e1gina Claves API, observa los valores <strong>Application ID<\/strong> y\u00a0<strong>Admin API Key<\/strong>. Utilizar\u00e1s estas credenciales para autenticar la conexi\u00f3n entre la aplicaci\u00f3n Laravel y Algolia.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/application-id-admin-keys.png\" alt=\"ID de la aplicaci\u00f3n y Claves API del administrador\" width=\"1600\" height=\"868\"><figcaption class=\"wp-caption-text\">ID de la aplicaci\u00f3n y Claves API del administrador<\/figcaption><\/figure>\n<p>A\u00f1ade el c\u00f3digo siguiente a tu archivo .env utilizando tu editor de c\u00f3digo y sustituye los marcadores de posici\u00f3n por los secretos de API de Algolia correspondientes.<\/p>\n<pre><code class=\"language-bash\">ALGOLIA_APP_ID=APPLICATION_ID\nALGOLIA_SECRET=ADMIN_API_KEY<\/code><\/pre>\n<p>Adem\u00e1s, sustituye la variable <code>SCOUT_DRIVER<\/code> por el c\u00f3digo siguiente para cambiar el valor de <code>meilisearch<\/code> a <code>algolia<\/code>. El cambio de este valor indicar\u00e1 a Scout que utilice el controlador de Algolia.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER=algolia<\/code><\/pre>\n<h2>C\u00f3mo Crear los Controladores de la Aplicaci\u00f3n<\/h2>\n<p>Dentro del directorio <strong>app\/Http\/Controllers\/<\/strong>, crea un archivo <strong>TrainSearchController.<\/strong><strong>php<\/strong> para almacenar un controlador para la aplicaci\u00f3n. El controlador listar\u00e1 y a\u00f1adir\u00e1 datos al modelo <code>Train<\/code>.<\/p>\n<p>A\u00f1ade el siguiente bloque de c\u00f3digo en el archivo <strong>TrainSearchController<\/strong>.<strong>php<\/strong> para crear el controlador.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppHttpControllers;\nuse IlluminateHttpRequest;\nuse AppHttpRequests;\nuse AppModelsTrain;\n\nclass TrainSearchController extends Controller\n{\n    \/**\n     * Get the index name for the model.\n     *\n     * @return string\n    *\/\n    public function index(Request $request)\n    {\n        if($request-&gt;has('titlesearch')){\n            $trains = Train::search($request-&gt;titlesearch)\n                -&gt;paginate(6);\n        }else{\n            $trains = Train::paginate(6);\n        }\n        return view('Train-search',compact('trains'));\n    }\n\n    \/**\n     * Get the index name for the model.\n     *\n     * @return string\n    *\/\n    public function create(Request $request)\n    {\n        $this-&gt;validate($request,['title'=&gt;'required']);\n\n        $trains = Train::create($request-&gt;all());\n        return back();\n    }\n}<\/code><\/pre>\n<h2>C\u00f3mo Crear las Rutas de la Aplicaci\u00f3n<\/h2>\n<p>En este paso, crear\u00e1s las rutas para listar y a\u00f1adir nuevos trenes a la base de datos.<\/p>\n<p>Abre tu archivo <strong>routes\/web.php<\/strong> y sustituye el c\u00f3digo existente por el bloque que aparece a continuaci\u00f3n.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse IlluminateSupportFacadesRoute;\nuse AppHttpControllersTrainSearchController;\n\nRoute::get('\/', function () {\n    return view('welcome');\n});\n\nRoute::get('trains-lists', [TrainSearchController::class, 'index']) -&gt; name ('trains-lists');\n\nRoute::post('create-item', [TrainSearchController::class, 'create']) -&gt; name ('create-item');<\/code><\/pre>\n<p>El c\u00f3digo anterior define dos rutas en la aplicaci\u00f3n. La petici\u00f3n <code>GET<\/code> para la ruta <code>\/trains-lists<\/code> lista todos los datos de trenes almacenados. La petici\u00f3n <code>POST<\/code> para la ruta <code>\/create-item<\/code> crea nuevos datos del tren.<\/p>\n<h2>C\u00f3mo Crear las Vistas de la Aplicaci\u00f3n<\/h2>\n<p>Crea un archivo dentro del directorio <strong>resources\/views\/<\/strong> y ll\u00e1malo <strong>Train-search.blade.php<\/strong>. El archivo mostrar\u00e1 la interfaz de usuario para la funcionalidad de b\u00fasqueda.<\/p>\n<p>A\u00f1ade el contenido del bloque de c\u00f3digo siguiente en el archivo <strong>Train-search<\/strong>.<strong>blade.php<\/strong> para crear una p\u00e1gina \u00fanica para la funcionalidad de b\u00fasqueda.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;Laravel - Laravel Scout Algolia Search Example&lt;\/title&gt;\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;div class=\"container\"&gt;\n    &lt;h2 class=\"text-bold\"&gt;Laravel Full-Text Search Using Scout &lt;\/h2&gt;&lt;br\/&gt;\n    &lt;form method=\"POST\" action=\"{{ route('create-item') }}\" autocomplete=\"off\"&gt;\n        @if(count($errors))\n            &lt;div class=\"alert alert-danger\"&gt;\n                &lt;strong&gt;Whoops!&lt;\/strong&gt; There is an error with your input.\n                &lt;br\/&gt;\n                &lt;ul&gt;\n                    @foreach($errors-&gt;all() as $error)\n                    &lt;li&gt;{{ $error }}&lt;\/li&gt;\n                    @endforeach\n                &lt;\/ul&gt;\n            &lt;\/div&gt;\n        @endif\n\n        &lt;input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\"&gt;\n\n        &lt;div class=\"row\"&gt;\n            &lt;div class=\"col-md-6\"&gt;\n                &lt;div class=\"form-group {{ $errors-&gt;has('title') ? 'has-error' : '' }}\"&gt;\n                    &lt;input type=\"text\" id=\"title\" name=\"title\" class=\"form-control\" placeholder=\"Enter Title\" value=\"{{ old('title') }}\"&gt;\n                    &lt;span class=\"text-danger\"&gt;{{ $errors-&gt;first('title') }}&lt;\/span&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"col-md-6\"&gt;\n                &lt;div class=\"form-group\"&gt;\n                    &lt;button class=\"btn btn-primary\"&gt;Create New Train&lt;\/button&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/form&gt;\n\n    &lt;div class=\"panel panel-primary\"&gt;\n      &lt;div class=\"panel-heading\"&gt;Train Management&lt;\/div&gt;\n      &lt;div class=\"panel-body\"&gt;\n            &lt;form method=\"GET\" action=\"{{ route('trains-lists') }}\"&gt;\n\n                &lt;div class=\"row\"&gt;\n                    &lt;div class=\"col-md-6\"&gt;\n                        &lt;div class=\"form-group\"&gt;\n                            &lt;input type=\"text\" name=\"titlesearch\" class=\"form-control\" placeholder=\"Enter Title For Search\" value=\"{{ old('titlesearch') }}\"&gt;\n                        &lt;\/div&gt;\n                    &lt;\/div&gt;\n                    &lt;div class=\"col-md-6\"&gt;\n                        &lt;div class=\"form-group\"&gt;\n                            &lt;button class=\"btn btn-primary\"&gt;Search&lt;\/button&gt;\n                        &lt;\/div&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/form&gt;\n\n            &lt;table class=\"table\"&gt;\n                &lt;thead&gt;\n                    &lt;th&gt;Id&lt;\/th&gt;\n                    &lt;th&gt;Train Title&lt;\/th&gt;\n                    &lt;th&gt;Creation Date&lt;\/th&gt;\n                    &lt;th&gt;Updated Date&lt;\/th&gt;\n                &lt;\/thead&gt;\n                &lt;tbody&gt;\n                    @if($trains-&gt;count())\n                        @foreach($trains as $key =&gt; $item)\n                            &lt;tr&gt;\n                                &lt;td&gt;{{ ++$key }}&lt;\/td&gt;\n                                &lt;td&gt;{{ $item-&gt;title }}&lt;\/td&gt;\n                                &lt;td&gt;{{ $item-&gt;created_at }}&lt;\/td&gt;\n                                &lt;td&gt;{{ $item-&gt;updated_at }}&lt;\/td&gt;\n                            &lt;\/tr&gt;\n                        @endforeach\n                    @else\n                        &lt;tr&gt;\n                            &lt;td colspan=\"4\"&gt;No train data available&lt;\/td&gt;\n                        &lt;\/tr&gt;\n                    @endif\n                &lt;\/tbody&gt;\n            &lt;\/table&gt;\n            {{ $trains-&gt;links() }}\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>El c\u00f3digo HTML anterior contiene un elemento de formulario con un campo de entrada y un bot\u00f3n para escribir el t\u00edtulo de un tren antes de guardarlo en la base de datos. El c\u00f3digo tambi\u00e9n contiene una tabla HTML que muestra los detalles <strong>id<\/strong>, <strong>title<\/strong>, <strong>created_at<\/strong> y <strong>updated_at<\/strong> de una entrada de tren dentro de la base de datos.<\/p>\n<h2>C\u00f3mo Utilizar la B\u00fasqueda Algolia<\/h2>\n<p>Para ver la p\u00e1gina, navega a <a href=\"http:\/\/127.0.0.1:8000\/trains-lists\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/127.0.0.1:8000\/trains-lists<\/a> desde tu navegador web.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/train-model-data.png\" alt=\"Datos del modelo de tren\" width=\"1600\" height=\"527\"><figcaption class=\"wp-caption-text\">Datos del modelo de tren<\/figcaption><\/figure>\n<p>La base de datos est\u00e1 actualmente vac\u00eda, por lo que debes introducir el t\u00edtulo de un tren de demostraci\u00f3n en el campo de entrada y hacer clic en <strong>Crear nuevo tren<\/strong> para guardarlo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/new-train-entry.png\" alt=\"Insertar una nueva entrada de tren\" width=\"1600\" height=\"531\"><figcaption class=\"wp-caption-text\">Insertar una nueva entrada de tren<\/figcaption><\/figure>\n<p>Para utilizar la funci\u00f3n de b\u00fasqueda, escribe una palabra clave de cualquiera de los t\u00edtulos de tren guardados en el campo de entrada <strong>Introducir t\u00edtulo para la b\u00fasqueda<\/strong> y haz clic en <strong>Buscar<\/strong>.<\/p>\n<p>Como se muestra en la imagen siguiente, s\u00f3lo se mostrar\u00e1n las entradas de b\u00fasqueda que contengan la palabra clave en sus t\u00edtulos.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/search-feature-train-entry.png\" alt=\"Utilizar la funci\u00f3n de b\u00fasqueda para encontrar una entrada de tren\" width=\"1600\" height=\"533\"><figcaption class=\"wp-caption-text\">Utilizar la funci\u00f3n de b\u00fasqueda para encontrar una entrada de tren<\/figcaption><\/figure>\n<h2>Meilisearch con Laravel Scout<\/h2>\n<p>Meilisearch es un motor de b\u00fasqueda de c\u00f3digo abierto centrado en la velocidad, el rendimiento y la mejora de la experiencia del desarrollador. Comparte varias caracter\u00edsticas con Algolia, utilizando los mismos algoritmos, estructuras de datos e investigaci\u00f3n, pero con un <a href=\"https:\/\/kinsta.com\/es\/blog\/mejor-lenguaje-de-programacion-para-aprender\/\">lenguaje de programaci\u00f3n<\/a> diferente.<\/p>\n<p>Los desarrolladores pueden crear y autoalojar una instancia de Meilisearch dentro de su infraestructura local o en la nube. Meilisearch tambi\u00e9n tiene una oferta beta en la nube similar a Algolia para los desarrolladores que quieran utilizar el producto sin gestionar su infraestructura.<\/p>\n<p>En el tutorial, ya tienes una instancia local de Meilisearch ejecut\u00e1ndose dentro de tus contenedores <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-docker\/\">Docker<\/a>. Ahora ampliar\u00e1s la funcionalidad de Laravel Scout para utilizar la instancia de Meilisearch.<\/p>\n<p>Para a\u00f1adir Meilisearch a la aplicaci\u00f3n Laravel, ejecuta el siguiente comando en el terminal de tu proyecto.<\/p>\n<pre><code class=\"language-bash\">composer require meilisearch\/meilisearch-php<\/code><\/pre>\n<p>A continuaci\u00f3n, tienes que modificar las variables de Meilisearch dentro del archivo <strong>.env<\/strong> para configurarlo.<\/p>\n<p>Sustituye las variables <code>SCOUT_DRIVER<\/code>, <code>MEILISEARCH_HOST<\/code>, y <code>MEILISEARCH_KEY<\/code> del archivo . <strong>env<\/strong> por las que aparecen a continuaci\u00f3n.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER=meilisearch\nMEILISEARCH_HOST=http:\/\/127.0.0.1:7700\nMEILISEARCH_KEY=LockKey<\/code><\/pre>\n<p>La clave <code>SCOUT_DRIVER<\/code> especifica el controlador que debe utilizar Scout, mientras que <code>MEILISEARCH_HOST<\/code> representa el dominio donde se ejecuta tu instancia de Meilisearch. Aunque no es necesario durante el desarrollo, se recomienda a\u00f1adir la <code>MEILISEARCH_KEY<\/code> en producci\u00f3n.<\/p>\n<p><strong>Nota:<\/strong> Comenta el ID y el Secreto de Algolia cuando utilices Meilisearch como tu controlador preferido.<\/p>\n<p>Una vez completadas las configuraciones <strong>.env<\/strong>, debes indexar tus registros preexistentes utilizando el comando Artisan que se indica a continuaci\u00f3n.<\/p>\n<pre><code class=\"language-bash\">php artisan scout:import \"AppModelsTrain\"<\/code><\/pre>\n<h2>Laravel Scout con el Motor de Base de Datos<\/h2>\n<p>El <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout#database-and-collection-engines\" target=\"_blank\" rel=\"noopener noreferrer\">motor de la base de datos<\/a>\u00a0de Scout puede ser m\u00e1s adecuado para aplicaciones que utilizan bases de datos m\u00e1s peque\u00f1as o gestionan cargas de trabajo menos intensivas. Actualmente, el motor de base de datos soporta <a href=\"https:\/\/kinsta.com\/es\/blog\/postgresql-vs-mysql\/\">PostgreSQL y MySQL<\/a>.<\/p>\n<p>Este motor utiliza cl\u00e1usulas \u00abwhere-like\u00bb e \u00edndices de texto completo contra tu base de datos existente, lo que le permite encontrar los resultados de b\u00fasqueda m\u00e1s relevantes. No necesitas indexar tus registros cuando utilices el motor de base de datos.<\/p>\n<p>Para utilizar el motor de base de datos, debes establecer tu variable <code>SCOUT_DRIVER<\/code> <strong>.env<\/strong> en la base de datos.<\/p>\n<p>Abre el archivo .<strong>env<\/strong> dentro de la aplicaci\u00f3n Laravel y cambia el valor de la variable <code>SCOUT_DRIVER<\/code>.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = database<\/code><\/pre>\n<p>Despu\u00e9s de cambiar tu controlador a la base de datos, Scout pasar\u00e1 a utilizar el motor de base de datos para la b\u00fasqueda de texto completo.<\/p>\n<h2>Motor de Colecci\u00f3n con Laravel Scout<\/h2>\n<p>Adem\u00e1s del motor de base de datos, Scout tambi\u00e9n ofrece un <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout#collection-engine\" target=\"_blank\" rel=\"noopener noreferrer\">motor de colecci\u00f3n<\/a>. Este motor utiliza cl\u00e1usulas \u00abwhere\u00bb y filtrado de colecciones para extraer los resultados de b\u00fasqueda m\u00e1s relevantes.<\/p>\n<p>A diferencia del motor de base de datos, el motor de colecciones admite todas las bases de datos relacionales que tambi\u00e9n admite Laravel.<\/p>\n<p>Puedes utilizar el motor de rolecci\u00f3n estableciendo la variable de entorno <code>SCOUT_DRIVER<\/code> en <code>collection<\/code> o especificando manualmente el motor de recolecci\u00f3n en el archivo de configuraci\u00f3n de Scout.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = collection<\/code><\/pre>\n<h2>Explorer con Elasticsearch<\/h2>\n<p>Con la fuerza de las consultas de Elasticsearch, Explorer es un moderno controlador de Elasticsearch para Laravel Scout. Ofrece un controlador Scout compatible y ventajas como almacenar, buscar y analizar cantidades masivas de datos en tiempo real. Elasticsearch con Laravel ofrece resultados en milisegundos.<\/p>\n<p>Para utilizar el controlador Elasticsearch Explorer en tu aplicaci\u00f3n Laravel, tendr\u00e1s que configurar el archivo boilerplate <strong>docker-compose.yml<\/strong> que gener\u00f3 el script Laravel-Scout. A\u00f1adir\u00e1s las configuraciones adicionales para Elasticsearch y reiniciar\u00e1s los contenedores.<\/p>\n<p>Abre tu archivo <strong>docker-compose.yml<\/strong> y sustituye su contenido por lo siguiente.<\/p>\n<pre><code class=\"language-yaml\"># For more information: https:\/\/laravel.com\/docs\/sail\nversion: '3'\nservices:\n    laravel.test:\n        build:\n            context: .\/vendor\/laravel\/sail\/runtimes\/8.1\n            dockerfile: Dockerfile\n            args:\n                WWWGROUP: '${WWWGROUP}'\n        image: sail-8.1\/app\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        ports:\n            - '${APP_PORT:-80}:80'\n            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'\n        environment:\n            WWWUSER: '${WWWUSER}'\n            LARAVEL_SAIL: 1\n            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'\n            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'\n        volumes:\n            - '.:\/var\/www\/html'\n        networks:\n            - sail\n        depends_on:\n            - mysql\n            - redis\n            - meilisearch\n            - mailhog\n            - selenium\n            - pgsql\n            - elasticsearch\n\n    mysql:\n        image: 'mysql\/mysql-server:8.0'\n        ports:\n            - '${FORWARD_DB_PORT:-3306}:3306'\n        environment:\n            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ROOT_HOST: \"%\"\n            MYSQL_DATABASE: '${DB_DATABASE}'\n            MYSQL_USER: '${DB_USERNAME}'\n            MYSQL_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ALLOW_EMPTY_PASSWORD: 1\n        volumes:\n            - 'sail-mysql:\/var\/lib\/mysql'\n            - '.\/vendor\/laravel\/sail\/database\/mysql\/create-testing-database.sh:\/docker-entrypoint-initdb.d\/10-create-testing-database.sh'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"mysqladmin\", \"ping\", \"-p${DB_PASSWORD}\"]\n            retries: 3\n            timeout: 5s\n            \n    elasticsearch:\n        image: 'elasticsearch:7.13.4'\n        environment:\n            - discovery.type=single-node\n        ports:\n            - '9200:9200'\n            - '9300:9300'\n        volumes:\n            - 'sailelasticsearch:\/usr\/share\/elasticsearch\/data'\n        networks:\n            - sail\n    kibana:\n        image: 'kibana:7.13.4'\n        environment:\n            - elasticsearch.hosts=http:\/\/elasticsearch:9200\n        ports:\n            - '5601:5601'\n        networks:\n            - sail\n        depends_on:\n            - elasticsearch\n    redis:\n        image: 'redis:alpine'\n        ports:\n            - '${FORWARD_REDIS_PORT:-6379}:6379'\n        volumes:\n            - 'sail-redis:\/data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"redis-cli\", \"ping\"]\n            retries: 3\n            timeout: 5s\n    pgsql:\n        image: 'postgres:13'\n        ports:\n            - '${FORWARD_DB_PORT:-5432}:5432'\n        environment:\n            PGPASSWORD: '${DB_PASSWORD:-secret}'\n            POSTGRES_DB: '${DB_DATABASE}'\n            POSTGRES_USER: '${DB_USERNAME}'\n            POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'\n        volumes:\n            - 'sailpgsql:\/var\/lib\/postgresql\/data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"pg_isready\", \"-q\", \"-d\", \"${DB_DATABASE}\", \"-U\", \"${DB_USERNAME}\"]\n            retries: 3\n            timeout: 5s\n    meilisearch:\n        image: 'getmeili\/meilisearch:latest'\n        ports:\n            - '${FORWARD_MEILISEARCH_PORT:-7700}:7700'\n        volumes:\n            - 'sail-meilisearch:\/meili_data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"wget\", \"--no-verbose\", \"--spider\",  \"http:\/\/localhost:7700\/health\"]\n            retries: 3\n            timeout: 5s\n    mailhog:\n        image: 'mailhog\/mailhog:latest'\n        ports:\n            - '${FORWARD_MAILHOG_PORT:-1025}:1025'\n            - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'\n        networks:\n            - sail\n    selenium:\n        image: 'selenium\/standalone-chrome'\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        volumes:\n            - '\/dev\/shm:\/dev\/shm'\n        networks:\n            - sail\nnetworks:\n    sail:\n        driver: bridge\nvolumes:\n    sail-mysql:\n        driver: local\n    sail-redis:\n        driver: local\n    sail-meilisearch:\n        driver: local\n    sailpgsql:\n        driver: local\n    sailelasticsearch:\n        driver: local <\/code><\/pre>\n<p>A continuaci\u00f3n, ejecuta el siguiente comando para extraer la nueva imagen de Elasticsearch que has a\u00f1adido al archivo <strong>docker-compose.yml<\/strong><\/p>\n<pre><code class=\"language-bash\">docker-compose up<\/code><\/pre>\n<p>A continuaci\u00f3n, ejecuta el siguiente comando de Composer para instalar Explorer en el proyecto.<\/p>\n<pre><code class=\"language-bash\">composer require jeroen-g\/explorer<\/code><\/pre>\n<p>Tambi\u00e9n tienes que crear un archivo de configuraci\u00f3n para el controlador de Explorer.<\/p>\n<p>Ejecuta el comando Artisan que aparece a continuaci\u00f3n para generar un archivo <strong>explorer.config<\/strong> para almacenar las configuraciones.<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --tag=explorer.config<\/code><\/pre>\n<p>El archivo de configuraci\u00f3n generado anteriormente estar\u00e1 disponible en el directorio <strong>\/config<\/strong>.<\/p>\n<p>En tu archivo <strong>config\/explorer<\/strong>.<strong>php<\/strong>, puedes hacer referencia a tu modelo utilizando la clave <code>indexes<\/code>.<\/p>\n<pre><code class=\"language-php\">'indexes' =&gt; [\n        AppModelsTrain::class\n],<\/code><\/pre>\n<p>Cambia el valor de la variable <code>SCOUT_DRIVER<\/code> dentro del archivo <strong>.env<\/strong> a <code>elastic<\/code> para configurar Scout para que utilice el controlador Explorer.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = elastic<\/code><\/pre>\n<p>En este punto, utilizar\u00e1s Explorer dentro del modelo <code>Train<\/code> implementando la interfaz Explorer y sobrescribiendo el m\u00e9todo <code>mappableAs()<\/code>.<\/p>\n<p>Abre el archivo <strong>Train.<\/strong> php dentro del directorio <strong>App &gt; Models<\/strong> y sustituye el c\u00f3digo existente por el c\u00f3digo que aparece a continuaci\u00f3n.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppModels;\n \nuse IlluminateDatabaseEloquentFactoriesHasFactory;\nuse IlluminateDatabaseEloquentModel;\nuse JeroenGExplorerApplicationExplored;\nuse LaravelScoutSearchable;\n \nclass Train extends Model implements Explored\n{\n    use HasFactory;\n    use Searchable;\n \n    protected $fillable = ['title'];\n \n    public function mappableAs(): array\n    {\n        return [\n        \t'id'=&gt;$this-&gt;Id,\n        \t'title' =&gt; $this-&gt;title,\n        ];\n    }\n} <\/code><\/pre>\n<p>Con el c\u00f3digo que has a\u00f1adido arriba, ahora puedes utilizar el Explorador para buscar texto dentro del modelo <code>Train<\/code>.<\/p>\n\n<h2>Resumen<\/h2>\n<p>Para los desarrolladores de PHP, Laravel y add-ons como Scout hacen que sea pan comido integrar una funcionalidad de b\u00fasqueda de texto completo r\u00e1pida y robusta. Con el motor de base de datos, el motor de colecciones y las capacidades de Meilisearch y Elasticsearch, puedes interactuar con la base de datos de tu aplicaci\u00f3n e implementar mecanismos de b\u00fasqueda avanzada en apenas milisegundos.<\/p>\n<p>Gestionar y actualizar sin problemas tu base de datos significa que tus usuarios reciben una experiencia \u00f3ptima mientras tu c\u00f3digo permanece limpio y eficiente.<\/p>\n<p>Con nuestras soluciones de <a href=\"https:\/\/kinsta.com\/es\/changelog\/alojamiento-de-aplicaciones-bases-de-datos\/\">alojamiento de aplicaciones y bases de datos<\/a>, Kinsta es tu soluci\u00f3n integral para todas tus necesidades de desarrollo de Laravel moderno. <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Los primeros 20 d\u00f3lares corren de nuestra cuenta<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El framework Laravel se ha convertido en un recurso de referencia para los desarrolladores que crean servicios web. Como herramienta de c\u00f3digo abierto, Laravel ofrece un &#8230;<\/p>\n","protected":false},"author":199,"featured_media":65858,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1303],"class_list":["post-65857","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo- Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo\" \/>\n<meta property=\"og:description\" content=\"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-15T13:22:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T12:57:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo\",\"datePublished\":\"2023-05-15T13:22:24+00:00\",\"dateModified\":\"2025-01-17T12:57:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\"},\"wordCount\":2734,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\",\"name\":\"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo- Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg\",\"datePublished\":\"2023-05-15T13:22:24+00:00\",\"dateModified\":\"2025-01-17T12:57:52+00:00\",\"description\":\"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg\",\"width\":1500,\"height\":750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo- Kinsta\u00ae","description":"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/","og_locale":"es_ES","og_type":"article","og_title":"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo","og_description":"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.","og_url":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-05-15T13:22:24+00:00","article_modified_time":"2025-01-17T12:57:52+00:00","og_image":[{"width":1500,"height":750,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo","datePublished":"2023-05-15T13:22:24+00:00","dateModified":"2025-01-17T12:57:52+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/"},"wordCount":2734,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/","url":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/","name":"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo- Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg","datePublished":"2023-05-15T13:22:24+00:00","dateModified":"2025-01-17T12:57:52+00:00","description":"Aprende todo sobre Laravel Scout, c\u00f3mo instalarlo en un proyecto Laravel, y c\u00f3mo utilizar la biblioteca para activar la b\u00fasqueda de texto completo.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/laravel-scout\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/laravel-scout.jpg","width":1500,"height":750},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-scout\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"Usar Laravel Scout para Activar la B\u00fasqueda de Texto Completo"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/65857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=65857"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/65857\/revisions"}],"predecessor-version":[{"id":69104,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/65857\/revisions\/69104"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/65857\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/65858"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=65857"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=65857"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=65857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}