crasmedia / laravel-scout-elastic
Elastic Driver for Laravel Scout
Requires
- php: >=5.6.4
- elasticsearch/elasticsearch: ^5.0
- laravel/scout: ^3.0
Requires (Dev)
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~5.0
Suggests
- elasticsearch/elasticsearch: Required to use the Elasticsearch engine (^5.0).
README
This package makes is the Elasticsearch driver for Laravel Scout.
Contents
Installation
You can install the package via composer:
composer require Crasmedia/laravel-scout-elastic
You must add the Scout service provider and the package service provider in your app.php config:
// config/app.php 'providers' => [ ... Laravel\Scout\ScoutServiceProvider::class, ... ScoutEngines\Elasticsearch\ElasticsearchProvider::class, ],
Setting up Elasticsearch configuration
You must have a Elasticsearch server up and running with the index you want to use created
If you need help with this please refer to the Elasticsearch documentation
After you've published the Laravel Scout package configuration:
// config/scout.php // Set your driver to elasticsearch 'driver' => env('SCOUT_DRIVER', 'elasticsearch'), ... 'elasticsearch' => [ 'index' => env('ELASTICSEARCH_INDEX', 'laravel'), 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://localhost'), ], ], ...
Usage
Now you can use Laravel Scout as described in the official documentation
Custom modifications
You can create/delete your own indexes and put custom mappings on it
$index = config('scout.elasticsearch.index'); // Check if index exists if($model->searchableUsing()->exists($index)) { // Delete index if exists $model->searchableUsing()->deleteIndex($index); } // Create new index $model->searchableUsing()->createIndex($index); // Put custom mapping $mappings = $model->mapping(); $model->searchableUsing()->putMapping($index, $model->getTable(), $mappings);
For using the custom mapping just add a mapping function to your model
public function mapping() { $mapping = [ 'title' => [ 'type' => 'keyword' ] ]; return $mapping; }
Boost
If you wanna boost some fields, just add a boosts variable to your model
protected $boosts = [ 'title' => 2 ];
More information on elastic site
Sort
Just use the eloquent order by function
Model::search('')->orderBy('title', 'asc')->get()
Credits
License
The MIT License (MIT).