Search In Laravel 5
In every application search is the trickiest part while everyone wants a quick and effective search engine for their application. Let’s see how we can make this process easy and scalable in a Laravel application. We will use a package called TNTSearch which is a full-text search engine written in PHP.
Installing TNT Search
Since we’ve composer as industry standard so installing packages is not a problem. just add the following line in your composer.json file
{
"require" : {
"teamtnt/tntsearch": "0.6.*"
}
}
or simply run the following command right from your terminal.
$ composer require teamtnt/tntsearch
it will pick appropriate version for you.
Now open up config/app.php and register the following service provider and create an alias for the namespaced facade.
Service Provider
TeamTNT\TNTSearch\TNTSearchServiceProvider::class,
Alias
'TNTSearch' => TeamTNT\TNTSearch\Facades\TNTSearch::class,
Now that the installation part is done, let’s dive into the cool stuff.
Indexing
Let’s say we’ve a products table with Title, Description and Price fields, we will create an artisan command to perform our indexing operations.
Open a terminal window and execute the following command to generate ProductIndexer class.
$ php artisan make:console ProductIndexer
Locate the file at app/Console/Commands/ProductIndexer.php and set handle method like this
Cool! Now Register the command with Laravel by appending the following line into the $commands array in app/Console/Kernal.php
\App\Console\Commands\ProductIndexer::class
Our indexing part is almost done, we can index our products any time by running the following artisan command
$ php artisan index:products
You can find the newly generated index file at storage/products.index
Performing a Search
Let’s setup a search form real quick with routes and controller actions
# Displays our search form
Route::get('products', 'ProductsController@index');# Displays our search results
Route::get('products/search', 'ProductsController@search');
From PrdouctController@index we’ll simply return a view which renders our search form and we’ll submit that form to ProductsController@search
Let’s see how to tackle the search part,
We’re almost done, now our site has a basic but powerful search engine.
List of all products
Search Results
I’ll share an other part of this article to discuss re-indexing and moving the indexing jargon to background using Laravel’s scheduler.
Thanks,
Follow me on Twitter