Suchen mit Laravel
Als umfangreiches PHP-Framework bringt Laravel natürlich auch eine Such-Engine mit: Scout. Die Basis-Installation läuft dabei in wenigen Schritten ab und schon hat man eine solide Basis-Such-Funktion für seine Applikation.
Scout installieren
Als erstes müssen wir Scout mittels des Composer Package Managers unserer Laravel-Installation hinzufügen:
composer require laravel/scout
Anschließend noch die Konfiguration laden:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
TNTSearch Driver installieren
Zusätzlich zu Scout benötigen wir noch einen Such-Indexer, bzw. Driver. Hier empfehle ich den TNTSearch Driver, da dieser kostenlos zur Verfügung steht. Es gibt natürlich auch andere, z.B. Algolia, welche jedoch eigens erworben werden müssen. Wir installieren den TNTSearch Driver wieder mit Composer via:
composer require teamtnt/laravel-scout-tntsearch-driver
Anschließend fügen wir die beiden service provider unserer app.php im config-Verzeichnis hinzu:
'providers' => [
//...
TeamTNT\Scout\TNTSearchScoutServiceProvider::class,
Laravel\Scout\ScoutServiceProvider::class,
],
Im nächsten Schritt müssen wir Scout noch mitteilen, welcher Driver verwendet werden soll. Dazu bearbeiten wir unsere .env-Datei und fügen folgendes hinzu:
SCOUT_DRIVER=tntsearch
Abschließend ergänzen wir die scout.php im config-Verzeichnis noch um die zusätzliche Driver-Konfiguration:
'tntsearch' => [
'storage' => storage_path('app/search'),
'fuzziness' => env('TNTSEARCH_FUZZINESS', false),
'fuzzy' => [
'prefix_length' => 2,
'max_expansions' => 50,
'distance' => 2
],
'asYouType' => false,
'searchBoolean' => env('TNTSEARCH_BOOLEAN', false),
],
Eventuell ändert ihr euren "storage_path" noch auf einen individuellen Pfad; hier wird der Such-Index abgelegt.
Suche verwenden
Damit nun eure Modelle durchsuchbar werden, müsst ihr euer Model wie folgt abändern:
namespace App;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Produkt extends Model
{
use Searchable;
// ...
}
Sind alle Modelle entsprechend angepasst, dann könnt ihr die vorhandenen mittels folgenden Befehls indizieren:
php artisan scout:import App\\Produkt
Später hinzukommende Modelle werden automatisch beim Aufruf der save() oder update()-Funktion dem Index hinzugefügt!
Suche starten
Sind alle eure Modelle angepasst, könnt ihr nun ein Formular für die Suche anlegen. Diese wird dann einem Controller übergeben, welche wie folgt nun nach entsprechenden Modellen sucht:
$produkte = Produkt::search('Apfel')->get();
Die gefundenen Produkte könnt ihr anschließend nun auf einer Such-Ergebnisse-Seite ausgeben.
Ihr könnt die search()-Funktion natürlich mit where() und orderBy() entsprechend kombinieren.
Weitere Infos findet ihr unter: https://laravel.com/docs/5.6/scout

Alles rund ums Thema Datenschutz, DSGVO und Hilfe bei der praktischen Umsetzung.
Ben Fehler
Digitalisierungsberater, Tekky und Hobby-Programmierer...
-
Laravel Scout
Laravel Scout provides a simple, driver based solution for adding full-text search to your Eloquent models.