Full Text Search Using Scout And Algolia in Laravel 6
Teams applying “Full Text Search Using Scout And Algolia in Laravel 6” in a production project can use this team workflow page to record implementation, review and debugging time, then compare that effort with tests and shipped functionality instead of treating activity as performance by itself.
Before copying the example into a live application, confirm version-specific behaviour with the official Laravel website and test it against the project’s actual database and runtime.
Dec 02, 2019
hii guys,
In this example,I will show you how to add full text search using scout in your laravel 6 application.Here we will use scout ans algolia to perform full text search.
You just need to create an account in algolia.com and create one index where your data will store.
Follow below step to add full text search in your application :
Install Laravel 6
you will create laravel 6 fresh application.
composer create-project --prefer-dist laravel/laravel ScoutFullTextSearch
Install Scout Package
Now here we will run below command to install scout package.
composer require laravel/scout
config/app.php
Add ScoutServiceProvider to providers array in app.php file like as below :
'providers' => [
....
Laravel\Scout\ScoutServiceProvider::class,
]
Publish Assets
Let's go ahead and publish the assets provided by the Scout library using the following command.
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Install Algolia
Now we have to install algolia package by running below command.
composer require algolia/algoliasearch-client-php
Package Configuration
Now we have to create new account in algolia.com. So if you haven't account on algolia.com site then click here and create new account : algolia.com.
From above screenshot you can get app id and secret from dashboard.
config/scout.php
Add id and secret in scout.php file like as below .
'algolia' => [
'id' => env('ALGOLIA_APP_ID', '*******'),
'secret' => env('ALGOLIA_SECRET', '******************'),
],
.env
Also put id and secret in .env file .
ALGOLIA_APP_ID=*********
ALGOLIA_SECRET=***********************
routes/web.php
Add product route in web.php file.
Route::get('product', ['as'=>'product.index','uses'=>'ProductController@index']);
Route::post('product-add', ['as'=>'product.add','uses'=>'ProductController@create']);
Create Controller
Run below command to make product controller
php artisan make:controller ProductController
app\Http\Controllers\ProductController.php update productcontroller.php like as below :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
class ProductController extends Controller
{
/**
* Get the index name for the model.
*
* @return string
*/
public function index(Request $request)
{
if($request->has('search')){
$products = Product::search($request->search)->paginate(5);
}else{
$products = Product::paginate(5);
}
return view('product-index',compact('products'));
}
/**
* Get the index name for the model.
*
* @return string
*/
public function create(Request $request)
{
$this->validate($request,[
'name'=>'required',
'quantity'=>'required'
]);
$products = Product::create($request->all());
return back();
}
}
Create Model
Run below command to make product model
php artisan make:model Product
app\Product.php update product.php like as below :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Product extends Model
{
use Searchable;
public $fillable = [
'name','quantity'
];
/**
* Get the index name for the model.
*
* @return string
*/
public function searchableAs()
{
return 'product';
}
}
Create Blade File
Put below code in your product blade file .
product-index.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 6 Scout Search</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Laravel 6 Scout Search</h2><br/>
<form method="POST" action="{{ route('product.add') }}" autocomplete="off">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="row">
<div class="col-md-4">
<div class="form-group {{ $errors->has('name') ? 'has-error' : '' }}">
<input type="text" id="name" name="name" class="form-control" placeholder="Enter Name" value="{{ old('name') }}">
<span class="text-danger">{{ $errors->first('name') }}</span>
</div>
</div>
<div class="col-md-4">
<div class="form-group {{ $errors->has('quantity') ? 'has-error' : '' }}">
<input type="text" id="quantity" name="quantity" class="form-control" placeholder="Enter Quantity" value="{{ old('quantity') }}">
<span class="text-danger">{{ $errors->first('quantity') }}</span>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<button class="btn btn-primary rounded-0">Create New Product</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12">
<h5><strong>Product</strong></h5><hr>
<form method="GET" action="{{ route('product.index') }}">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<input type="text" name="search" class="form-control" placeholder="Search" value="{{ Request::get('search') }}">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<button class="btn btn-primary rounded-0">Search</button>
</div>
</div>
</div>
</form>
<table class="table table-bordered">
<thead>
<th width="5%">Id</th>
<th>Name</th>
<th>Quantity</th>
</thead>
<tbody>
@if($products->count())
@foreach($products as $key => $value)
<tr>
<td>{{ ++$key }}</td>
<td>{{ $value->name }}</td>
<td>{{ $value->quantity }}</td>
</tr>
@endforeach
@else
<tr>
<td colspan="4">There are no data.</td>
</tr>
@endif
</tbody>
</table>
{{ $products->links() }}
</div>
</div>
</div>
</body>
</html>
It will help you....
- How to Notifications With database Driver in Laravel 11?
- How to Send Email Via Notification in Laravel 11?
- How to Install and Configure Laravel 11 Debugbar?
- How to Like Dislike System in Laravel 11?
- How to Paginate a Model with Relationship in Laravel 11?
- Laravel 11 Upload Files to Amazon S3 Example
- Laravel 11 Send WhatsApp Messages Example
- Laravel 11 Rest API Authentication Using JWT Tutorial