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