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

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.