Skip to main content

Search

Introduction​

The JUMP Search Library plugin adds search support for different search drivers.

Installation​

composer require jump/search

Repository​

Github

Configuration​

For the plugin to work, you will need to specify what search driver you want to use.

.env
JUMP_SEARCH_DRIVER=selected_driver

View how to define various search driver options here.

Drivers​

MySQL Driver​

MySQL driver provides quick search using data stored in the database.

Setup​

Select your MySQL driver​

Declare the driver in your .env file.

.env
JUMP_SEARCH_DRIVER=mysql
Set up your search providers​

Once you know which Eloquent models you want to be able to search, use EloquentProvider class to create your search providers.

On the Site plugin, create search directory, where your providers will live.

Create your search provider and use EloquentProvider to extend it.

my-site/plugins/app/site/search/BlogSearchProvider.php
class BlogSearchProvider extends EloquentProvider

Specify which model you want to target in the getModelClass() method.

my-site/plugins/app/site/search/BlogSearchProvider.php
/**
* @return string
*/
protected function getModelClass(): string
{
return Article::class;
}

Define your searchable attributes in the getAttributesForIndex() method.

my-site/plugins/app/site/search/BlogSearchProvider.php
/**
* @param mixed $model
* @param string $index
*
* @return array
*/
protected function getAttributesForIndex($model, $index): array
{
return [
'title' => $model->title,
'description' => $model->description,
'content' => $model->content,
];
}

Specify what this provider will be called in the getType() method. You will be able to use it when running the import command.

my-site/plugins/app/site/search/BlogSearchProvider.php
/**
* @return string
*/
public function getType(): string
{
return 'App.Blog.Article';
}

Define what index this model will belong to on the jump_search_index table:

my-site/plugins/app/site/search/BlogSearchProvider.php
/**
* @return string[]
*/
public function getIndexes(): array
{
return ['main.index'];
}

Algolia Driver​

Algolia driver provides efficient, flexible and insightful search. It's really quick, takes search relevance into account and is highly configurable.

Setup​

Connect your app to Algolia​

Create Algolia account and set up your application. Add your application keys to the .env file:

.env
JUMP_SEARCH_ALGOLIA_APPLICATION_ID=XXXXXX
JUMP_SEARCH_ALGOLIA_API_KEY=XXXXXXXXXXXXXXXXXX
JUMP_READ_ONLY_ALGOLIA_API_KEY=XXXXXXXXXXXXXXXXXX
Set up your search providers​

Once you know which Eloquent models you want to be able to search, use EloquentProvider class to create your search providers.

On the Site plugin, create search directory, where your providers will live.

Create your search provider and use EloquentProvider to extend it.

my-site/plugins/app/site/search/ArticleProvider.php
class ArticleProvider extends EloquentProvider

Specify which model you want to target in the getModelClass() method.

my-site/plugins/app/site/search/ArticleProvider.php
/**
* @return string
*/
protected function getModelClass(): string
{
return Article::class;
}

Define your searchable attributes in the getAttributesForIndex() method.

my-site/plugins/app/site/search/ArticleProvider.php
/**
* @param mixed $model
* @param string $index
*
* @return array
*/
protected function getAttributesForIndex($model, $index): array
{
return [
'title' => $model->title,
'sub_title' => $model->sub_title,
'introduction' => $model->introduction,
'slug' => $model->slug,
'category' => $model->category->name,
'published' => $model->published,
'publish_date' => $model->publish_date->format('Y-m-d'),
'image' => $model->image,
];
}

Specify what this provider will be called in the getType() method. You will be able to use it when running the import command.

my-site/plugins/app/site/search/ArticleProvider.php
/**
* @return string
*/
public function getType(): string
{
return 'App.Articles.Article';
}

Define what this index will be called on Algolia:

my-site/plugins/app/site/search/ArticleProvider.php
/**
* @return string[]
*/
public function getIndexes(): array
{
return [app()->environment() . '_articles'];
}
tip

Specify the environment on your Index name (app()->environment()) to ensure test and live data is always separated.

Import data​

Use the import command to import the index data on your Algolia application. In the terminal, on your project root run:

php artisan search:import App.Articles.Article

If for whatever reason you need to flush data on Algolia application, use the reset command:

php artisan search:reset
danger

Please note, the reset command will flush all your Algolia indices (on the current environment if you specified the environment in your index getType() method).

TNT Driver​

danger

Using the TNT Driver will trigger your first written warning. Jokes! The TNT Driver is now deprecated.

Elastic Search Driver​

danger

The Elastic Driver is now deprecated.

Console commands​

The Search plugin providers two commands: Import and Reset.

Import command​

The import command runs the insertMany method on the selected search driver.

Command​

php artisan search:import

You can optionally specify your search provider as a first parameter in the command:

php artisan search:import App.Articles.Article 

Reset command​

The reset command runs the deleteIndexes method on the selected search driver.

Command​

php artisan search:reset