Sprache:

Suche

Suche in Laravel 5

  • Teilen:
Suche in Laravel 5

Einführung

Die Suche ist der kniffligste Teil in jeder Anwendung, während jeder eine schnelle und effektive Suchmaschine für seine Anwendung haben möchte. Lassen Sie uns sehen, wie wir diesen Prozess in einer Laravel-Anwendung einfach und skalierbar gestalten können. Wir werden ein Paket namens TNTSearch ist eine in PHP geschriebene Volltextsuchmaschine.

Installation von TNT Search

Da wir Composer als Industriestandard haben, ist die Installation von Paketen kein Problem. Fügen Sie einfach die folgende Zeile in Ihre composer.json-Datei ein

{
  "require"
	
	 : {
      "teamtnt/tntsearch"
	
	: "0.6.*"
	
	
   }
}

oder führen Sie einfach den folgenden Befehl direkt in Ihrem Terminal aus.

composer require teamtnt/tntsearch

wird die passende Version für Sie ausgewählt.

Öffnen Sie nun die Datei config/app.php und registrieren Sie den folgenden Dienstanbieter und erstellen Sie einen Alias für die namenstragende Fassade.

Service Provider

TeamTNT\TNTSearch\TNTSearchServiceProvider::class

Alias

‘TNTSearch’=> TeamTNT\TNTSearch\Facades\TNTSearch::class

Nun, da der Installationsteil abgeschlossen ist, können wir uns den coolen Dingen widmen.

Indizierung

Nehmen wir an, wir haben eine Produkttabelle mit den Feldern Titel, Beschreibung und Preis. Wir werden einen Artisan-Befehl erstellen, um unsere Indizierungsoperationen durchzuführen.

Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl aus, um die Klasse ProductIndexer zu erzeugen.

php artisan make:console ProductIndexer

Finden Sie die Datei unter app/Console/Commands/ProductIndexer.php und die Handle-Methode wie folgt einstellen

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use TeamTNT\TNTSearch\Facades\TNTSearch;

class ProductIndexer extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'index:products';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Index the Products';

    /**
     * Create a new command instance.
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $indexer = TNTSearch::createIndex('products.index');
        $indexer->query("SELECT id, title, description, price FROM products");
        $indexer->run();
    }
}

Super! Registrieren Sie nun den Befehl bei Laravel, indem Sie die folgende Zeile an das Array $commands in app/Console/Kernal.php

\App\Console\Commands\ProductIndexer::class

Unser Indizierungsteil ist fast fertig, wir können unsere Produkte jederzeit indizieren, indem wir den folgenden artisan-Befehl ausführen

php artisan index:products

Sie finden die neu erstellte Indexdatei unter storage/products.index

Durchführen einer Suche

Lassen Sie uns schnell ein Suchformular mit Routen und Controller-Aktionen einrichten

# Displays our search form
Route::get('products', 'ProductsController@index');
# Displays our search results
Route::get('products/search', 'ProductsController@search');

 

Von PrdouctController@index geben wir einfach eine Ansicht zurück, die unser Suchformular wiedergibt, und übermitteln dieses Formular an ProductsController@search

Schauen wir uns an, wie wir die Suche angehen,

<?php 

namespace App\Http\Controllers;

use App\Http\Requests;
use App\Product;
use Illuminate\Http\Request;
use TeamTNT\TNTSearch\Facades\TNTSearch;

class ProductsController extends Controller
{
    ....

    public function search( Request $request )
    {
        TNTSearch::selectIndex("products.index");
        
        $results = TNTSearch::search($request->get('query'), 1000);

        $products = Product::whereIn('id', $results[ 'ids' ])->get();

        return view('search.results', compact('products'));
    }
    
    ....
}

 

Wir sind fast fertig, jetzt hat unsere Website eine einfache, aber leistungsfähige Suchmaschine.

Ich werde einen weiteren Teil dieses Artikels teilen, um die Neuindizierung und das Verschieben des Indizierungsjargons in den Hintergrund mit Laravels Scheduler zu besprechen.

Azeem Hassni

Azeem Hassni

I write code and i love it. I do write blogs on things which I am passionate about. I love to Explore the internet of things and whats new in web technologies. My topic of Interests include WordPress, Laravel & Magento to name a few.