ActualitésExploration de laravel scout : activer la recherche textuelle

Exploration de laravel scout : activer la recherche textuelle

-

Le framework Laravel s’est solidement établi comme une ressource incontournable pour les développeurs de services web. Avec ses fonctionnalités prêtes à l’emploi, Laravel offre un environnement propice à la création d’applications robustes et fonctionnelles. Parmi ces fonctionnalités, Laravel Scout se distingue en tant que bibliothèque permettant de gérer les index de recherche d’une application. Sa polyvalence offre aux développeurs la liberté de configurer des options telles que les pilotes Algolia, Meilisearch, MySQL ou Postgres pour stocker les index, adaptant ainsi la recherche à leurs besoins spécifiques.

Sommaire

Mise en Place de Laravel Scout : conditions préalables

Avant d’explorer Laravel Scout, assurez-vous d’avoir les éléments suivants sur votre machine :

  • Le compilateur PHP installé, de préférence la version 8.1.
  • Le moteur Docker ou Docker Desktop pour faciliter la gestion des conteneurs.
  • Un compte sur Algolia, une plateforme cloud de recherche.

Installation de Scout dans un projet Laravel

La première étape pour utiliser Scout consiste à créer une application Laravel. Un script Bash, nommé Laravel-Scout, est disponible pour générer une application Laravel dans un conteneur Docker, éliminant ainsi le besoin d’installations supplémentaires, comme une base de données MySQL. Pour les utilisateurs Windows, assurez-vous d’avoir configuré Windows Subsystem for Linux (WSL).

Si WSL est en place, exécutez la commande suivante dans votre terminal pour définir votre distribution Linux préférée :

bash

Copy code

wsl -s ubuntu

Ensuite, naviguez vers l’emplacement souhaité pour votre projet et exécutez le script Laravel-Scout avec la commande suivante :

bash

Copy code

cd /desktop

curl -s https://laravel.build/laravel-scout-app | bash

 

Après cela, dirigez-vous vers le répertoire du projet et lancez les conteneurs Docker avec la commande suivante :

bash

Copy code

./vendor/bin/sail up

 

Si une erreur survient, spécifiez un port avec la variable APP_PORT :

bash

Copy code

APP_PORT=3001 ./vendor/bin/sail up

 

Enfin, lancez l’application via Artisan avec :

bash

Copy code

php artisan serve

 

Configuration de Laravel Scout dans l’application

Dans votre terminal, activez le gestionnaire de paquets Composer avec la commande suivante pour ajouter Laravel Scout à votre projet :

bash

Copy code

composer require laravel/scout

 

Ensuite, publiez le fichier de configuration de Scout avec la commande :

bash

Copy code

php artisan vendor:publish –provider=”Laravel\Scout\ScoutServiceProvider”

 

Modifiez le fichier .env pour ajouter la variable booléenne SCOUT_QUEUE :

env

Copy code

SCOUT_QUEUE=true

 

Également dans le fichier .env, ajustez la variable DB_HOST pour qu’elle pointe vers votre localhost :

env

Copy code

DB_HOST=127.0.0.1

 

Marquage d’un modèle pour la recherche et configuration de l’index

Scout n’active pas par défaut les modèles pour la recherche, il est nécessaire de les marquer explicitement avec le trait Laravel\Scout\Searchable. Nous allons créer un modèle pour une application de démonstration de trains, stockant les noms fictifs des trains disponibles.

Générez la migration avec la commande :

bash

Copy code

php artisan make:migration create_trains_table

 

Ouvrez la migration générée dans le répertoire database/migrations/ et ajoutez une colonne de titre :

php

Copy code

$table->string(‘title’);

 

Appliquez ensuite la migration avec :

bash

Copy code

php artisan migrate

 

Créez un fichier Train.php dans le répertoire app/Models/ et marquez le modèle comme searchable :

php

Copy code

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use Laravel\Scout\Searchable;

 

class Train extends Model

{

 use Searchable;

 public $fillable = [‘title’];

 

 public function searchableAs()

 {

 return ‘trains_index’;

 }

}

 

Utilisation d’Algolia avec Scout : configuration

Nous utiliserons le pilote Algolia pour notre première recherche en texte intégral avec Laravel Scout. Commencez par installer le client Algolia PHP :

bash

Copy code

composer require algolia/algoliasearch-client-php

 

Ajoutez vos identifiants Algolia dans le fichier .env. Récupérez ces informations depuis votre tableau de bord Algolia, dans la section API Keys :

env

Copy code

ALGOLIA_APP_ID=APPLICATION_ID

ALGOLIA_SECRET=ADMIN_API_KEY

SCOUT_DRIVER=algolia

 

Création des contrôleurs d’application

Dans le répertoire app/Http/Controllers/, créez le fichier TrainSearchController.php pour gérer les fonctionnalités de recherche. Ce contrôleur listera et ajoutera des données au modèle Train.

Ajoutez le code suivant dans TrainSearchController.php :

php

Copy code

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\Models\Train;

 

class TrainSearchController extends Controller

{

 public function index(Request $request)

 {

 if($request->has(‘titlesearch’)){

 $trains = Train::search($request->titlesearch)

 ->paginate(6);

 }else{

 $trains = Train::paginate(6);

 }

 return view(‘Train-search’,compact(‘trains’));

 }

 

 public function create(Request $request)

 {

 $this->validate($request,[‘title’=>’required’]);

 $trains = Train::create($request->all());

 return back();

 }

}

 

Cette première partie couvre la mise en place de Laravel Scout, la configuration avec Algolia, et la préparation de notre modèle pour la recherche. La suite de cet article explorera l’utilisation concrète de la recherche textuelle dans une application Laravel.

 

Création des routes et des vues de l’application

Configuration des routes

La mise en place des routes dans une application Laravel est essentielle pour définir la logique de navigation. Dans cette étape, nous allons créer les routes nécessaires pour lister les trains et ajouter de nouveaux éléments à la base de données.

Ouvrez le fichier routes/web.php et remplacez son contenu par le code suivant :

php

Copy code

<?php

 

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\TrainSearchController;

 

Route::get(‘/’, function () {

 return view(‘welcome’);

});

 

Route::get(‘trains-lists’, [TrainSearchController::class, ‘index’])->name(‘trains-lists’);

 

Route::post(‘create-item’, [TrainSearchController::class, ‘create’])->name(‘create-item’);

 

Le code ci-dessus déclare deux routes dans l’application. La première, une requête GET vers /trains-lists, permet de lister toutes les données de train stockées. La seconde, une requête POST vers /create-item, crée de nouvelles données sur les trains.

Création des vues

La création d’une interface utilisateur claire et fonctionnelle est cruciale. Dans cette section, nous allons créer une vue nommée Train-search.blade.php dans le répertoire resources/views/. Cette vue affichera l’interface utilisateur pour la fonctionnalité de recherche.

Ajoutez le contenu du bloc de code suivant dans le fichier Train-search.blade.php :

html

Copy code

<!DOCTYPE html>

<html>

<head>

 <title>Laravel – Laravel Scout Algolia Search Example</title>

 <link rel=”stylesheet” type=”text/css” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css”>

</head>

<body>

<div class=”container”>

 <h2 class=”text-bold”>Laravel Full-Text Search Using Scout </h2><br/>

 <form method=”POST” action=”{{ route(‘create-item’) }}” autocomplete=”off”>

 @if(count($errors))

 <div class=”alert alert-danger”>

 <strong>Whoops!</strong> There is an error with your input.

 <br/>

 <ul>

 @foreach($errors->all() as $error)

 <li>{{ $error }}</li>

 @endforeach

 </ul>

 </div>

 @endif

 

 <input type=”hidden” name=”_token” value=”{{ csrf_token() }}”>

 

 <div class=”row”>

 <div class=”col-md-6″>

 <div class=”form-group {{ $errors->has(‘title’) ? ‘has-error’ : ” }}”>

 <input type=”text” id=”title” name=”title” class=”form-control” placeholder=”Enter Title” value=”{{ old(‘title’) }}”>

 <span class=”text-danger”>{{ $errors->first(‘title’) }}</span>

 </div>

 </div>

 <div class=”col-md-6″>

 <div class=”form-group”>

 <button class=”btn btn-primary”>Create New Train</button>

 </div>

 </div>

 </div>

 </form>

 

 <div class=”panel panel-primary”>

 <div class=”panel-heading”>Train Management</div>

 <div class=”panel-body”>

 <form method=”GET” action=”{{ route(‘trains-lists’) }}”>

 

 <div class=”row”>

 <div class=”col-md-6″>

 <div class=”form-group”>

 <input type=”text” name=”titlesearch” class=”form-control” placeholder=”Enter Title For Search” value=”{{ old(‘titlesearch’) }}”>

 </div>

 </div>

 <div class=”col-md-6″>

 <div class=”form-group”>

 <button class=”btn btn-primary”>Search</button>

 </div>

 </div>

 </div>

 </form>

 

 <table class=”table”>

 <thead>

 <th>Id</th>

 <th>Train Title</th>

 <th>Creation Date</th>

 <th>Updated Date</th>

 </thead>

 <tbody>

 @if($trains->count())

 @foreach($trains as $key => $item)

 <tr>

 <td>{{ ++$key }}</td>

 <td>{{ $item->title }}</td>

 <td>{{ $item->created_at }}</td>

 <td>{{ $item->updated_at }}</td>

 </tr>

 @endforeach

 @else

 <tr>

 <td colspan=”4″>No train data available</td>

 </tr>

 @endif

 </tbody>

 </table>

 {{ $trains->links() }}

 </div>

 </div>

</div>

</body>

</html>

 

Le code HTML ci-dessus crée une page avec un formulaire pour saisir le titre d’un train avant de l’enregistrer dans la base de données. Il inclut également un tableau affichant id, title, created_at et updated_at des trains dans la base de données.

Utilisation de la recherche Algolia

Pour visualiser la page, accédez à http://127.0.0.1:8000/trains-lists depuis votre navigateur web. Comme la base de données est actuellement vide, saisissez le titre d’un train de démonstration dans le champ de saisie et cliquez sur “Create New Train” pour l’enregistrer.

Pour utiliser la fonction de recherche, entrez un mot-clé parmi les titres des trains enregistrés dans le champ “Enter Title For Search” et cliquez sur “Search”. Seules les entrées contenant le mot-clé dans leur titre seront affichées.

Meilisearch avec Laravel Scout

Meilisearch, moteur de recherche open source axé sur la vitesse et la performance, offre une alternative à Algolia. Bien qu’utilisant des technologies similaires, Meilisearch permet aux développeurs de gérer leur propre instance, que ce soit localement ou dans le cloud.

Pour intégrer Meilisearch à l’application Laravel, exécutez la commande suivante dans le terminal de votre projet :

bash

Copy code

composer require meilisearch/meilisearch-php

Ensuite, modifiez les variables de Meilisearch dans le fichier .env pour le configurer :

env

Copy code

SCOUT_DRIVER=meilisearch

MEILISEARCH_HOST=http://127.0.0.1:7700

MEILISEARCH_KEY=LockKey

 

La variable SCOUT_DRIVER spécifie le pilote que Scout doit utiliser, MEILISEARCH_HOST représente le domaine de votre instance Meilisearch, et MEILISEARCH_KEY (recommandé en production) assure la sécurité de votre instance.

Après ces configurations, indexez vos enregistrements existants avec la commande Artisan :

bash

Copy code

php artisan scout:import “App\Models\Train”

Laravel Scout avec le moteur de base de données

Le moteur de base de données de Scout est idéal pour les applications gérant des bases plus petites. Actuellement, il prend en charge PostgreSQL et MySQL. Pour utiliser ce moteur, modifiez la variable SCOUT_DRIVER dans le fichier .env :

env

Copy code

SCOUT_DRIVER=database

Avec cette configuration, Scout utilisera le moteur de base de données pour la recherche en texte intégral, simplifiant ainsi le processus sans nécessiter l’indexation des enregistrements.

En suivant ces étapes, vous avez exploré la configuration initiale de Laravel Scout avec Algolia, Meilisearch, et le moteur de base de données, tout en créant les routes et les vues nécessaires pour une application de recherche textuelle.

Extension des capacités avec Laravel Scout

Moteur de collecte Laravel Scout

Outre le moteur de base de données, Laravel Scout offre une alternative puissante appelée le moteur de collecte. Ce moteur utilise des clauses “where” et le filtrage des collections pour extraire des résultats de recherche pertinents. Une caractéristique distincte du moteur de collecte est sa compatibilité avec toutes les bases de données relationnelles prises en charge par Laravel.

Pour activer le moteur de collecte, vous pouvez définir la variable d’environnement SCOUT_DRIVER sur “collection” ou spécifier manuellement le pilote de collecte dans le fichier de configuration de Scout.

env

Copy code

SCOUT_DRIVER=collection

Exploration avec Elasticsearch

Explorer, un pilote Elasticsearch moderne pour Laravel Scout, tire parti de la puissance des requêtes Elasticsearch. Il offre des avantages tels que le stockage, la recherche et l’analyse de quantités massives de données en temps réel, fournissant des résultats en quelques millisecondes. Elasticsearch avec Laravel est une combinaison puissante pour des performances optimales.

Pour intégrer le pilote Elasticsearch Explorer dans votre application Laravel, vous devez configurer le fichier docker-compose.yml généré par le script Laravel-Scout. Ajoutez les configurations nécessaires pour Elasticsearch et redémarrez les conteneurs.

yaml

Copy code

# docker-compose.yml

version: ‘3’

services:

 # … (autres services)

 

 elasticsearch:

 image: ‘elasticsearch:7.13.4’

 environment:

 – discovery.type=single-node

 ports:

 – ‘9200:9200’

 – ‘9300:9300’

 volumes:

 – ‘sailelasticsearch:/usr/share/elasticsearch/data’

 networks:

 – sail

 

Assurez-vous de lancer la commande suivante pour extraire la nouvelle image Elasticsearch ajoutée au fichier docker-compose.yml.

bash

Copy code

docker-compose up

 

Ensuite, installez Explorer dans votre projet avec Composer.

bash

Copy code

composer require jeroen-g/explorer

 

Créez un fichier de configuration pour le pilote Explorer en exécutant la commande artisan suivante.

bash

Copy code

php artisan vendor:publish –tag=explorer.config

 

Le fichier de configuration généré sera disponible dans le répertoire /config. Référencez votre modèle dans ce fichier config/explorer.php en utilisant la clé indexes.

php

Copy code

‘indexes’ => [

 \App\Models\Train::class

],

 

Modifiez la variable SCOUT_DRIVER dans le fichier .env pour configurer Scout avec le pilote Explorer.

env

Copy code

SCOUT_DRIVER=elastic

 

Maintenant, vous pouvez utiliser Explorer dans le modèle Train en implémentant l’interface Explorer et en surchargeant la méthode mappableAs().

php

Copy code

<?php

 

namespace App\Models;

 

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

use JeroenG\Explorer\Application\Explored;

use Laravel\Scout\Searchable;

 

class Train extends Model implements Explored

{

 use HasFactory;

 use Searchable;

 

 protected $fillable = [‘title’];

 

 public function mappableAs(): array

 {

 return [

 ‘id’ => $this->id,

 ‘title’ => $this->title,

 ];

 }

}

 

Avec ces ajustements, vous pouvez désormais tirer parti du puissant moteur de collecte de Scout et explorer vos données avec Elasticsearch, offrant des fonctionnalités avancées de recherche et d’analyse.

 

Actualité

Samsung Galaxy A51 5G : Mise à jour complète

La politique de Samsung en matière de mises à jour de sécurité pour ses smartphones a toujours été exemplaire,...

Vers une nouvelle date de sortie pour GTA 6

Le monde du jeu vidéo retient son souffle en prévision de la sortie de Grand Theft Auto VI (GTA...

Redmi Spotlight Lite : Xiaomi et son appareil de projection compact

Xiaomi a récemment élargi sa gamme de produits avec le lancement du Redmi Spotlight Lite, un petit projecteur offrant...

Les avancées dans la prévention du burn-in sur les écrans OLED

Les écrans OLED (organic light emitting diode) fascinent par leur capacité à générer des noirs profonds et des couleurs...

Nintendo Switch 2: L’attente mondiale dans le gaming

Nintendo Switch 2, le produit le plus attendu dans le monde du gaming, est décrit comme la console de...

Mise à jour Samsung : Des bandes bleues sur l’écran, que faire ?

Après avoir installé la plus récente mise à jour sur leurs appareils, des utilisateurs remarquent des bandes bleues sur...

Populaires

Comment contacter le service client Vinted ?

Vinted : le service client Vinted est un dressing virtuel...

Comment nettoyer votre clavier sans l’endommager ?

Optimiser le nettoyage de votre clavier Si vous utilisez souvent...