{"id":69114,"date":"2023-05-15T14:23:02","date_gmt":"2023-05-15T13:23:02","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=69114&#038;preview=true&#038;preview_id=69114"},"modified":"2023-11-06T14:59:57","modified_gmt":"2023-11-06T13:59:57","slug":"laravel-scout-recherche-textuelle","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/","title":{"rendered":"Utiliser Laravel Scout pour activer la recherche textuelle"},"content":{"rendered":"<p>Le <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-laravel\/\">framework Laravel<\/a> est devenu une ressource incontournable pour les d\u00e9veloppeurs qui cr\u00e9ent des services web.<\/p>\n<p>En tant qu&rsquo;outil open source, Laravel offre une myriade de fonctionnalit\u00e9s pr\u00eates \u00e0 l&#8217;emploi qui permettent aux d\u00e9veloppeurs de cr\u00e9er des applications robustes et fonctionnelles.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/9.x\/scout\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Scout<\/a>, une biblioth\u00e8que permettant de g\u00e9rer les index de recherche de votre application, fait partie de ces fonctionnalit\u00e9s. Sa flexibilit\u00e9 permet aux d\u00e9veloppeurs d&rsquo;affiner les configurations et de choisir parmi les pilotes Algolia, Meilisearch, MySQL ou <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Postgres<\/a> pour stocker les index.<\/p>\n<p>Ici, nous allons explorer cet outil en profondeur, en vous apprenant comment ajouter le support de la recherche textuelle \u00e0 une application Laravel par le biais du pilote. Vous mod\u00e9liserez une application Laravel de d\u00e9monstration pour stocker le nom des trains fictifs et utiliserez ensuite Laravel Scout pour ajouter une recherche \u00e0 l&rsquo;application.<\/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>Conditions pr\u00e9alables<\/h2>\n<p>Pour suivre cette formation, vous devez avoir :<\/p>\n<ul>\n<li>Le compilateur PHP install\u00e9 sur votre ordinateur. Ce tutoriel utilise la version 8.1 de PHP.<\/li>\n<li>Le moteur Docker ou Docker Desktop install\u00e9 sur votre ordinateur<\/li>\n<li>Un compte cloud <a href=\"http:\/\/algolia.com\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia<\/a>, que vous pouvez cr\u00e9er gratuitement<\/li>\n<\/ul>\n\n<h2>Comment installer Scout dans un projet Laravel<\/h2>\n<p>Pour utiliser Scout, vous devez d&rsquo;abord cr\u00e9er une application Laravel dans laquelle vous avez l&rsquo;intention d&rsquo;ajouter la fonctionnalit\u00e9 de recherche. Le script Laravel-Scout Bash contient les commandes n\u00e9cessaires pour g\u00e9n\u00e9rer une application Laravel dans un conteneur Docker. L&rsquo;utilisation de Docker signifie que vous n&rsquo;avez pas besoin d&rsquo;installer des logiciels suppl\u00e9mentaires, comme une base de donn\u00e9es MySQL.<\/p>\n<p>Le script Laravel-scout utilise le langage de script Bash, vous devez donc l&rsquo;ex\u00e9cuter dans un environnement Linux. Si vous utilisez Windows, assurez-vous de <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\" target=\"_blank\" rel=\"noopener noreferrer\">configurer<\/a> Windows Subsystem for Linux (WSL).<\/p>\n<p>Si vous utilisez WSL, ex\u00e9cutez la commande suivante dans votre terminal pour d\u00e9finir votre distribution Linux pr\u00e9f\u00e9r\u00e9e.<\/p>\n<pre><code class=\"language-bash\">wsl -s ubuntu<\/code><\/pre>\n<p>Ensuite, naviguez jusqu&rsquo;\u00e0 l&#8217;emplacement de votre ordinateur o\u00f9 vous souhaitez placer le projet. Le script Laravel-Scout g\u00e9n\u00e9rera un r\u00e9pertoire de projet \u00e0 cet endroit. Dans l&rsquo;exemple ci-dessous, le script Laravel-Scout cr\u00e9e un r\u00e9pertoire dans le r\u00e9pertoire du <strong>desktop<\/strong>.<\/p>\n<pre><code class=\"language-bash\">cd \/desktop<\/code><\/pre>\n<p>Ex\u00e9cutez la commande ci-dessous pour ex\u00e9cuter le script Laravel-Scout. Il mettra en place une application Dockeris\u00e9e avec le code de base n\u00e9cessaire.<\/p>\n<pre><code class=\"language-bash\">curl -s https:\/\/laravel.build\/laravel-scout-app | bash<\/code><\/pre>\n<p>Apr\u00e8s l&rsquo;ex\u00e9cution, changez de r\u00e9pertoire en utilisant <code>cd laravel-scout-app<\/code>. Ensuite, ex\u00e9cutez la commande <code>sail-up<\/code> dans le dossier du projet pour d\u00e9marrer les conteneurs Docker pour votre application.<\/p>\n<p><strong>Remarque :<\/strong> sur de nombreuses distributions Linux, il se peut que vous deviez ex\u00e9cuter la commande ci-dessous avec la commande <code>sudo<\/code> pour obtenir des privil\u00e8ges \u00e9lev\u00e9s.<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Il se peut que vous rencontriez une erreur :<\/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 stating the port is allocated\" width=\"307\" height=\"19\"><figcaption class=\"wp-caption-text\">Error stating the port is allocated.<\/figcaption><\/figure>\n<p>Pour r\u00e9soudre ce probl\u00e8me, utilisez la variable <code>APP_PORT<\/code> pour sp\u00e9cifier un port dans la commande <code>sail up<\/code>:<\/p>\n<pre><code class=\"language-bash\">APP_PORT=3001 .\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Ensuite, ex\u00e9cutez la commande ci-dessous pour lancer l&rsquo;application via Artisan sur le serveur 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 l'application Laravel avec Artisan\" width=\"1600\" height=\"387\"><figcaption class=\"wp-caption-text\">Servir l&rsquo;application Laravel avec Artisan<\/figcaption><\/figure>\n<p>Depuis votre navigateur web, acc\u00e9dez \u00e0 l&rsquo;application en cours d&rsquo;ex\u00e9cution \u00e0 l&rsquo;adresse http:\/\/127.0.0.1:8000. L&rsquo;application affichera la page de bienvenue de Laravel \u00e0 la route par d\u00e9faut.<\/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=\"Page d'accueil de l'application Laravel\" width=\"1328\" height=\"900\"><figcaption class=\"wp-caption-text\">Page d&rsquo;accueil de l&rsquo;application Laravel<\/figcaption><\/figure>\n<h2>Comment ajouter Laravel Scout \u00e0 l&rsquo;application<\/h2>\n<p>Dans votre terminal, saisissez la commande pour activer le gestionnaire de paquets <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a> PHP afin d&rsquo;ajouter Laravel Scout au projet.<\/p>\n<pre><code class=\"language-bash\">composer require laravel\/scout<\/code><\/pre>\n<p>Ensuite, publiez le fichier de configuration Scout en utilisant la commande vendor:publish. La commande publiera le fichier de configuration <code>scout.php<\/code> dans le r\u00e9pertoire <strong>config<\/strong> de votre application.<\/p>\n<pre><code class=\"language-bash\"> php artisan vendor:publish --provider=\"Laravel\\Scout\\ScoutServiceProvider\"<\/code><\/pre>\n<p>Modifiez maintenant le fichier <strong>.env<\/strong> du mod\u00e8le standard pour qu&rsquo;il contienne une valeur bool\u00e9enne <code>SCOUT_QUEUE<\/code>.<\/p>\n<p>La valeur <code>SCOUT_QUEUE<\/code> permet \u00e0 Scout de mettre les op\u00e9rations en file d&rsquo;attente, ce qui am\u00e9liore les temps de r\u00e9ponse. Sans cette valeur, les pilotes Scout tels que <a href=\"https:\/\/www.meilisearch.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Meilisearch<\/a> ne refl\u00e9teront pas imm\u00e9diatement les nouveaux enregistrements.<\/p>\n<pre><code class=\"language-bash\">SCOUT_QUEUE=true<\/code><\/pre>\n<p>Modifiez \u00e9galement la variable <code>DB_HOST<\/code> dans le fichier <strong>.env<\/strong> pour qu&rsquo;elle pointe vers votre localhost afin d&rsquo;utiliser la <a href=\"https:\/\/kinsta.com\/fr\/blog\/sqlite-vs-mysql\/\">base de donn\u00e9es MySQL<\/a> dans les conteneurs Docker.<\/p>\n<pre><code class=\"language-bash\">DB_HOST=127.0.0.1<\/code><\/pre>\n<h2>Comment marquer un mod\u00e8le et configurer l&rsquo;index<\/h2>\n<p>Scout n&rsquo;active pas les mod\u00e8les de donn\u00e9es consultables par d\u00e9faut. Vous devez explicitement marquer un mod\u00e8le comme consultable en utilisant son trait <code>Laravel\\Scout\\Searchable<\/code>.<\/p>\n<p>Vous allez commencer par cr\u00e9er un mod\u00e8le de donn\u00e9es pour une application de d\u00e9monstration <code>Train<\/code> et le marquer comme consultable.<\/p>\n<h3>Comment cr\u00e9er un mod\u00e8le<\/h3>\n<p>Pour l&rsquo;application <code>Train<\/code>, vous voudrez stocker les noms provisoires de chaque train disponible.<\/p>\n<p>Ex\u00e9cutez la commande Artisan ci-dessous pour g\u00e9n\u00e9rer la migration et nommez-la <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=\"Cr\u00e9ation d'une migration nomm\u00e9e create_trains_table\" width=\"1600\" height=\"145\"><figcaption class=\"wp-caption-text\">Cr\u00e9ation d&rsquo;une migration nomm\u00e9e create_trains_table<\/figcaption><\/figure>\n<p>La migration sera g\u00e9n\u00e9r\u00e9e dans un fichier dont le nom combine le nom sp\u00e9cifi\u00e9 et l&rsquo;horodatage actuel.<\/p>\n<p>Ouvrez le fichier de migration situ\u00e9 dans le r\u00e9pertoire <strong>database\/migrations\/.<\/strong><\/p>\n<p>Pour ajouter une colonne de titre, ajoutez le code suivant apr\u00e8s la colonne <code>id()<\/code> \u00e0 la ligne 17. Le code ajoutera une colonne de titre.<\/p>\n<pre><code class=\"language-php\">$table-&gt;string('title');<\/code><\/pre>\n<p>Pour appliquer la migration, ex\u00e9cutez la commande ci-dessous.<\/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=\"Application de la migration Artisan\" width=\"1600\" height=\"335\"><figcaption class=\"wp-caption-text\">Application de la migration Artisan<\/figcaption><\/figure>\n<p>Apr\u00e8s avoir ex\u00e9cut\u00e9 les migrations de base de donn\u00e9es, cr\u00e9ez un fichier nomm\u00e9 <strong>Train.php<\/strong> dans le r\u00e9pertoire <strong>app\/Models\/.<\/strong><\/p>\n<h3>Comment ajouter le trait Laravel\\Scout\\Searchable<\/h3>\n<p>Marquez le mod\u00e8le <code>Train<\/code> pour la recherche en ajoutant le trait <code>Laravel\\Scout\\Searchable<\/code> au mod\u00e8le, comme indiqu\u00e9 ci-dessous.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Models;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Laravel\\Scout\\Searchable;\n\nclass Train extends Model\n{\n    use Searchable;\n    public $fillable = ['title'];<\/code><\/pre>\n<p>Vous devez \u00e9galement configurer les index de recherche en surchargeant la m\u00e9thode <code>searchableAS<\/code>. Le comportement par d\u00e9faut de Scout persisterait le mod\u00e8le pour correspondre au nom de la table du mod\u00e8le.<\/p>\n<p>Ajoutez donc le code suivant au fichier <strong>Train.php<\/strong> sous le code du bloc pr\u00e9c\u00e9dent.<\/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>Comment utiliser Algolia avec Scout<\/h2>\n<p>Pour la premi\u00e8re recherche en texte int\u00e9gral avec Laravel Scout, vous utiliserez le pilote <a href=\"https:\/\/www.algolia.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia<\/a>. Algolia est une plateforme SaaS (Software as a Service) utilis\u00e9e pour effectuer des recherches dans de grandes quantit\u00e9s de donn\u00e9es. Elle fournit aux d\u00e9veloppeurs un tableau de bord web pour g\u00e9rer leurs index de recherche et une API robuste \u00e0 laquelle vous pouvez acc\u00e9der via un kit de d\u00e9veloppement logiciel (SDK) dans votre langage de programmation pr\u00e9f\u00e9r\u00e9.<\/p>\n<p>Dans l&rsquo;application Laravel, vous utiliserez le <a href=\"https:\/\/github.com\/algolia\/algoliasearch-client-php\" target=\"_blank\" rel=\"noopener noreferrer\">paquet client<\/a> Algolia pour PHP.<\/p>\n<h3>Comment configurer Algolia<\/h3>\n<p>Tout d&rsquo;abord, vous devez installer le <a href=\"https:\/\/github.com\/algolia\/algoliasearch-client-php\">package client de recherche Algolia PHP<\/a> pour votre application.<\/p>\n<p>Ex\u00e9cutez la commande ci-dessous.<\/p>\n<pre><code class=\"language-bash\">composer require algolia\/algoliasearch-client-php<\/code><\/pre>\n<p>Ensuite, vous devez d\u00e9finir votre ID d&rsquo;application et votre cl\u00e9 API secr\u00e8te d&rsquo;Algolia dans le fichier <strong>.env<\/strong>.<\/p>\n<p>En utilisant votre navigateur web, naviguez vers votre tableau de bord Algolia pour obtenir les identifiants Application ID et Secret API Key.<\/p>\n<p>Cliquez sur <strong>Setting<\/strong> en bas de la colonne lat\u00e9rale de gauche pour acc\u00e9der \u00e0 la page <strong>Settings<\/strong>.<\/p>\n<p>Ensuite, cliquez sur <strong>API Keys<\/strong> dans la section <strong>Team and Access<\/strong> de la page Settings pour afficher les cl\u00e9s de votre compte 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=\"Page des cl\u00e9s API sur Algolia Cloud\" width=\"1600\" height=\"1020\"><figcaption class=\"wp-caption-text\">Page des cl\u00e9s API sur Algolia Cloud<\/figcaption><\/figure>\n<p>Sur la page API Keys, notez les valeurs <strong>Application ID<\/strong> et <strong>Admin API Key<\/strong>. Vous utiliserez ces informations d&rsquo;identification pour authentifier la connexion entre l&rsquo;application Laravel et 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 l'application et cl\u00e9s API administrateur\" width=\"1600\" height=\"868\"><figcaption class=\"wp-caption-text\">ID de l&rsquo;application et cl\u00e9s API administrateur<\/figcaption><\/figure>\n<p>Ajoutez le code ci-dessous \u00e0 votre fichier .env \u00e0 l&rsquo;aide de votre \u00e9diteur de code et remplacez les espaces r\u00e9serv\u00e9s par les secrets API Algolia correspondants.<\/p>\n<pre><code class=\"language-bash\">ALGOLIA_APP_ID=APPLICATION_ID\nALGOLIA_SECRET=ADMIN_API_KEY<\/code><\/pre>\n<p>Remplacez \u00e9galement la variable <code>SCOUT_DRIVER<\/code> par le code ci-dessous pour changer la valeur de <code>meilisearch<\/code> \u00e0 <code>algolia<\/code>. Le changement de cette valeur demandera \u00e0 Scout d&rsquo;utiliser le pilote Algolia.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER=algolia<\/code><\/pre>\n<h2>Comment cr\u00e9er les contr\u00f4leurs d&rsquo;application<\/h2>\n<p>Dans le r\u00e9pertoire <strong>app\/Http\/Controllers\/<\/strong>, cr\u00e9ez un fichier <strong>TrainSearchController.php<\/strong> pour stocker un contr\u00f4leur pour l&rsquo;application. Le contr\u00f4leur listera et ajoutera des donn\u00e9es au mod\u00e8le <code>Train<\/code>.<\/p>\n<p>Ajoutez le bloc de code suivant dans le fichier <strong>TrainSearchController.php<\/strong> pour construire le contr\u00f4leur.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Http\\Controllers;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Requests;\nuse App\\Models\\Train;\n\nclass TrainSearchController extends Controller\n{\n    \/**\n     * Compile the content for a trains list view.\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\Contracts\\View\\View\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     * Create a new train entry.\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\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>Comment cr\u00e9er les routes de l&rsquo;application<\/h2>\n<p>Dans cette \u00e9tape, vous allez cr\u00e9er les routes pour lister et ajouter de nouveaux trains \u00e0 la base de donn\u00e9es.<\/p>\n<p>Ouvrez votre fichier <strong>routes\/web.php<\/strong> et remplacez le code existant par le bloc ci-dessous.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse Illuminate\\Support\\Facades\\Route;\nuse App\\Http\\Controllers\\TrainSearchController;\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>Le code ci-dessus d\u00e9finit deux routes dans l&rsquo;application. La requ\u00eate <code>GET<\/code> pour l&rsquo;itin\u00e9raire <code>\/trains-lists<\/code> r\u00e9pertorie toutes les donn\u00e9es de train stock\u00e9es. La requ\u00eate <code>POST<\/code> pour la route <code>\/create-item<\/code> cr\u00e9e de nouvelles donn\u00e9es sur les trains.<\/p>\n<h2>Comment cr\u00e9er les vues de l&rsquo;application<\/h2>\n<p>Cr\u00e9ez un fichier dans le r\u00e9pertoire <strong>resources\/views\/<\/strong> et nommez-le <strong>Train-search.blade.php<\/strong>. Ce fichier affichera l&rsquo;interface utilisateur de la fonctionnalit\u00e9 de recherche.<\/p>\n<p>Ajoutez le contenu du bloc de code ci-dessous dans le fichier <strong>Train-search.blade.php<\/strong> pour cr\u00e9er une page unique pour la fonctionnalit\u00e9 de recherche.<\/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>Le code HTML ci-dessus contient un \u00e9l\u00e9ment de formulaire avec un champ de saisie et un bouton pour saisir le titre d&rsquo;un train avant de l&rsquo;enregistrer dans la base de donn\u00e9es. Le code contient \u00e9galement un tableau HTML affichant <strong>id<\/strong>, <strong>title<\/strong>, <strong>created_at<\/strong> et <strong>updated_at<\/strong> d&rsquo;une entr\u00e9e de train dans la base de donn\u00e9es.<\/p>\n<h2>Comment utiliser la recherche Algolia<\/h2>\n<p>Pour afficher la page, naviguez vers <a href=\"http:\/\/127.0.0.1:8000\/trains-lists\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/127.0.0.1:8000\/trains-lists<\/a> \u00e0 partir de votre navigateur 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=\"Donn\u00e9es du mod\u00e8le de train\" width=\"1600\" height=\"527\"><figcaption class=\"wp-caption-text\">Donn\u00e9es du mod\u00e8le de train<\/figcaption><\/figure>\n<p>La base de donn\u00e9es est actuellement vide, vous devez donc saisir le titre d&rsquo;un train de d\u00e9monstration dans le champ de saisie et cliquer sur <strong>Cr\u00e9er un nouveau train<\/strong> pour l&rsquo;enregistrer.<\/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=\"Ins\u00e9rer une nouvelle entr\u00e9e de train\" width=\"1600\" height=\"531\"><figcaption class=\"wp-caption-text\">Ins\u00e9rer une nouvelle entr\u00e9e de train<\/figcaption><\/figure>\n<p>Pour utiliser la fonction de recherche, saisissez un mot-cl\u00e9 parmi les titres de train enregistr\u00e9s dans le champ de saisie <strong>Saisir le titre pour la recherche<\/strong> et cliquez sur <strong>Rechercher<\/strong>.<\/p>\n<p>Comme le montre l&rsquo;image ci-dessous, seules les entr\u00e9es de recherche contenant le mot-cl\u00e9 dans leur titre s&rsquo;afficheront.<\/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=\"Utilisation de la fonction de recherche pour trouver une entr\u00e9e de train\" width=\"1600\" height=\"533\"><figcaption class=\"wp-caption-text\">Utilisation de la fonction de recherche pour trouver une entr\u00e9e de train<\/figcaption><\/figure>\n<h2>Meilisearch avec Laravel Scout<\/h2>\n<p>Meilisearch est un moteur de recherche open source ax\u00e9 sur la vitesse, la performance et l&rsquo;am\u00e9lioration de l&rsquo;exp\u00e9rience des d\u00e9veloppeurs. Il partage plusieurs fonctionnalit\u00e9s avec Algolia, utilisant les m\u00eames algorithmes, structures de donn\u00e9es et recherches &#8211; mais avec un <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleur-langage-programmation-apprendre\/\">langage de programmation<\/a> diff\u00e9rent.<\/p>\n<p>Les d\u00e9veloppeurs peuvent cr\u00e9er et h\u00e9berger eux-m\u00eames une instance de Meilisearch dans leur infrastructure sur site ou dans le cloud. Meilisearch propose \u00e9galement une offre b\u00eata similaire \u00e0 Algolia pour les d\u00e9veloppeurs qui souhaitent utiliser le produit sans en g\u00e9rer l&rsquo;infrastructure.<\/p>\n<p>Dans ce tutoriel, vous disposez d\u00e9j\u00e0 d&rsquo;une instance locale de Meilisearch fonctionnant dans vos conteneurs <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-docker\/\">Docker<\/a>. Vous allez maintenant \u00e9tendre la fonctionnalit\u00e9 Laravel Scout pour utiliser l&rsquo;instance Meilisearch.<\/p>\n<p>Pour ajouter Meilisearch \u00e0 l&rsquo;application Laravel, ex\u00e9cutez la commande ci-dessous dans le terminal de votre projet.<\/p>\n<pre><code class=\"language-bash\">composer require meilisearch\/meilisearch-php<\/code><\/pre>\n<p>Ensuite, vous devez modifier les variables de Meilisearch dans le fichier <strong>.env<\/strong> pour le configurer.<\/p>\n<p>Remplacez les variables <code>SCOUT_DRIVER<\/code>, <code>MEILISEARCH_HOST<\/code>, et <code>MEILISEARCH_KEY<\/code> dans le fichier <strong>.env<\/strong> par les variables ci-dessous.<\/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 cl\u00e9 <code>SCOUT_DRIVER<\/code> sp\u00e9cifie le pilote que Scout doit utiliser, tandis que <code>MEILISEARCH_HOST<\/code> repr\u00e9sente le domaine dans lequel votre instance de Meilisearch est ex\u00e9cut\u00e9e. Bien que cela ne soit pas n\u00e9cessaire pendant le d\u00e9veloppement, il est recommand\u00e9 d&rsquo;ajouter <code>MEILISEARCH_KEY<\/code> en production.<\/p>\n<p><strong>Remarque :<\/strong> Mettez en commentaire l&rsquo;ID et le secret Algolia lorsque vous utilisez Meilisearch comme pilote pr\u00e9f\u00e9r\u00e9.<\/p>\n<p>Apr\u00e8s avoir termin\u00e9 les configurations <strong>.env<\/strong>, vous devez indexer vos enregistrements pr\u00e9existants \u00e0 l&rsquo;aide de la commande Artisan ci-dessous.<\/p>\n<pre><code class=\"language-bash\">php artisan scout:import \"App\\Models\\Train\"<\/code><\/pre>\n<h2>Laravel Scout avec le moteur de base de donn\u00e9es<\/h2>\n<p>Le <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout#database-and-collection-engines\" target=\"_blank\" rel=\"noopener noreferrer\">moteur de base de donn\u00e9es<\/a> de Scout est plus adapt\u00e9 aux applications qui utilisent des bases de donn\u00e9es plus petites ou qui g\u00e8rent des charges de travail moins intensives. Actuellement, le moteur de base de donn\u00e9es supporte <a href=\"https:\/\/kinsta.com\/fr\/blog\/postgresql-vs-mysql\/\">PostgreSQL et MySQL<\/a>.<\/p>\n<p>Ce moteur utilise des clauses de type \u00ab where-like \u00bb et des index plein texte sur votre base de donn\u00e9es existante, ce qui lui permet de trouver les r\u00e9sultats de recherche les plus pertinents. Vous n&rsquo;avez pas besoin d&rsquo;indexer vos enregistrements lorsque vous utilisez le moteur de base de donn\u00e9es.<\/p>\n<p>Pour utiliser le moteur de base de donn\u00e9es, vous devez d\u00e9finir votre variable <code>SCOUT_DRIVER<\/code> <strong>.env<\/strong> sur la base de donn\u00e9es.<\/p>\n<p>Ouvrez le fichier <strong>.<\/strong> env dans l&rsquo;application Laravel et modifiez la valeur de la variable <code>SCOUT_DRIVER<\/code>.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = database<\/code><\/pre>\n<p>Apr\u00e8s avoir chang\u00e9 votre pilote pour la base de donn\u00e9es, Scout utilisera le moteur de base de donn\u00e9es pour la recherche en texte int\u00e9gral.<\/p>\n<h2>Moteur de collecte avec Laravel Scout<\/h2>\n<p>En plus du moteur de base de donn\u00e9es, Scout propose \u00e9galement un <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout#collection-engine\" target=\"_blank\" rel=\"noopener noreferrer\">moteur de collecte<\/a>. Ce moteur utilise les clauses \u00ab where \u00bb et le filtrage des collections pour extraire les r\u00e9sultats de recherche les plus pertinents.<\/p>\n<p>Contrairement au moteur de base de donn\u00e9es, le moteur de collecte prend en charge toutes les bases de donn\u00e9es relationnelles que Laravel prend \u00e9galement en charge.<\/p>\n<p>Vous pouvez utiliser le moteur de collecte en d\u00e9finissant la variable d&rsquo;environnement <code>SCOUT_DRIVER<\/code> sur <code>collection<\/code> ou en sp\u00e9cifiant manuellement le pilote de collecte dans le fichier de configuration de Scout.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = collection<\/code><\/pre>\n<h2>Explorer avec Elasticsearch<\/h2>\n<p>Avec la force des requ\u00eates Elasticsearch, Explorer est un pilote Elasticsearch moderne pour Laravel Scout. Il offre un pilote Scout compatible et des avantages tels que le stockage, la recherche et l&rsquo;analyse de quantit\u00e9s massives de donn\u00e9es en temps r\u00e9el. Elasticsearch avec Laravel offre des r\u00e9sultats en quelques millisecondes.<\/p>\n<p>Pour utiliser le pilote Elasticsearch Explorer dans votre application Laravel, vous devrez configurer le fichier boilerplate <strong>docker-compose.yml<\/strong> que le script Laravel-Scout a g\u00e9n\u00e9r\u00e9. Vous ajouterez les configurations suppl\u00e9mentaires pour Elasticsearch et red\u00e9marrerez les conteneurs.<\/p>\n<p>Ouvrez votre fichier <strong>docker-compose.yml<\/strong> et remplacez son contenu par ce qui suit.<\/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>Ensuite, ex\u00e9cutez la commande ci-dessous pour extraire la nouvelle image Elasticsearch que vous avez ajout\u00e9e au fichier <strong>docker-compose.y<\/strong> ml.<\/p>\n<pre><code class=\"language-bash\">docker-compose up<\/code><\/pre>\n<p>Ensuite, ex\u00e9cutez la commande Composer ci-dessous pour installer Explorer dans le projet.<\/p>\n<pre><code class=\"language-bash\">composer require jeroen-g\/explorer<\/code><\/pre>\n<p>Vous devez \u00e9galement cr\u00e9er un fichier de configuration pour le pilote Explorer.<\/p>\n<p>Ex\u00e9cutez la commande Artisan ci-dessous pour g\u00e9n\u00e9rer un fichier <strong>explorer.config<\/strong> afin de stocker les configurations.<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --tag=explorer.config<\/code><\/pre>\n<p>Le fichier de configuration g\u00e9n\u00e9r\u00e9 ci-dessus sera disponible dans le r\u00e9pertoire <strong>\/config<\/strong>.<\/p>\n<p>Dans votre fichier <strong>config\/explorer.php<\/strong>, vous pouvez r\u00e9f\u00e9rencer votre mod\u00e8le en utilisant la cl\u00e9 <code>indexes<\/code>.<\/p>\n<pre><code class=\"language-php\">'indexes' =&gt; [\n        \\App\\Models\\Train::class\n],<\/code><\/pre>\n<p>Changez la valeur de la variable <code>SCOUT_DRIVER<\/code> dans le fichier <strong>.env<\/strong> en <code>elastic<\/code> pour configurer Scout afin qu&rsquo;il utilise le pilote Explorer.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = elastic<\/code><\/pre>\n<p>\u00c0 ce stade, vous utiliserez Explorer dans le mod\u00e8le <code>Train<\/code> en impl\u00e9mentant l&rsquo;interface Explorer et en surchargeant la m\u00e9thode <code>mappableAs()<\/code>.<\/p>\n<p>Ouvrez le fichier <strong>Train.php<\/strong> dans le r\u00e9pertoire <strong>App\\Models<\/strong> et remplacez le code existant par le code ci-dessous.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Models;\n \nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse JeroenG\\Explorer\\Application\\Explored;\nuse Laravel\\Scout\\Searchable;\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>Avec le code que vous avez ajout\u00e9 ci-dessus, vous pouvez maintenant utiliser Explorer pour rechercher du texte dans le mod\u00e8le <code>Train<\/code>.<\/p>\n\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Pour les d\u00e9veloppeurs PHP, Laravel et les modules comme Scout facilitent l&rsquo;int\u00e9gration d&rsquo;une fonctionnalit\u00e9 de recherche textuelle rapide et robuste. Avec le moteur de base de donn\u00e9es, le moteur de collection et les capacit\u00e9s de Meilisearch et Elasticsearch, vous pouvez interagir avec la base de donn\u00e9es de votre application et mettre en \u0153uvre des m\u00e9canismes de recherche avanc\u00e9s en quelques millisecondes.<\/p>\n<p>La gestion et la mise \u00e0 jour transparentes de votre base de donn\u00e9es permettent \u00e0 vos utilisateurs de b\u00e9n\u00e9ficier d&rsquo;une exp\u00e9rience optimale, tandis que votre code reste propre et efficace.<\/p>\n<p>Avec nos solutions d&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/changelog\/hebergement-application-base-donnees\/\">h\u00e9bergement d&rsquo;applications et de bases de donn\u00e9es<\/a>, Kinsta est votre guichet unique pour tous vos besoins en d\u00e9veloppement Laravel moderne. Les <a href=\"https:\/\/sevalla.com\/application-hosting\/\">premiers 20 $ sont pour nous<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le framework Laravel est devenu une ressource incontournable pour les d\u00e9veloppeurs qui cr\u00e9ent des services web. En tant qu&rsquo;outil open source, Laravel offre une myriade de &#8230;<\/p>\n","protected":false},"author":199,"featured_media":69115,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[986],"class_list":["post-69114","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>Utiliser Laravel Scout pour activer la recherche textuelle - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Apprenez tout sur Laravel Scout, comment l&#039;installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.\" \/>\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\/fr\/blog\/laravel-scout-recherche-textuelle\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utiliser Laravel Scout pour activer la recherche textuelle\" \/>\n<meta property=\"og:description\" content=\"Apprenez tout sur Laravel Scout, comment l&#039;installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-15T13:23:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-06T13:59:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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=\"Apprenez tout sur Laravel Scout, comment l&#039;installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Utiliser Laravel Scout pour activer la recherche textuelle\",\"datePublished\":\"2023-05-15T13:23:02+00:00\",\"dateModified\":\"2023-11-06T13:59:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/\"},\"wordCount\":2761,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/\",\"name\":\"Utiliser Laravel Scout pour activer la recherche textuelle - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg\",\"datePublished\":\"2023-05-15T13:23:02+00:00\",\"dateModified\":\"2023-11-06T13:59:57+00:00\",\"description\":\"Apprenez tout sur Laravel Scout, comment l'installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg\",\"width\":1500,\"height\":750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Utiliser Laravel Scout pour activer la recherche textuelle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"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\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Utiliser Laravel Scout pour activer la recherche textuelle - Kinsta\u00ae","description":"Apprenez tout sur Laravel Scout, comment l'installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.","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\/fr\/blog\/laravel-scout-recherche-textuelle\/","og_locale":"fr_FR","og_type":"article","og_title":"Utiliser Laravel Scout pour activer la recherche textuelle","og_description":"Apprenez tout sur Laravel Scout, comment l'installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.","og_url":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-05-15T13:23:02+00:00","article_modified_time":"2023-11-06T13:59:57+00:00","og_image":[{"width":1500,"height":750,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Apprenez tout sur Laravel Scout, comment l'installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Jeremy Holcombe","Dur\u00e9e de lecture estim\u00e9e":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Utiliser Laravel Scout pour activer la recherche textuelle","datePublished":"2023-05-15T13:23:02+00:00","dateModified":"2023-11-06T13:59:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/"},"wordCount":2761,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/","url":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/","name":"Utiliser Laravel Scout pour activer la recherche textuelle - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg","datePublished":"2023-05-15T13:23:02+00:00","dateModified":"2023-11-06T13:59:57+00:00","description":"Apprenez tout sur Laravel Scout, comment l'installer dans un projet Laravel et comment utiliser la biblioth\u00e8que pour activer la recherche textuelle.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/05\/laravel-scout.jpg","width":1500,"height":750},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/laravel-scout-recherche-textuelle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/fr\/sujets\/laravel\/"},{"@type":"ListItem","position":3,"name":"Utiliser Laravel Scout pour activer la recherche textuelle"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","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\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/69114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=69114"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/69114\/revisions"}],"predecessor-version":[{"id":74077,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/69114\/revisions\/74077"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/translations\/es"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/69114\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/69115"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=69114"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=69114"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=69114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}