2017 © Pedro Peláez
 

library laravel-scout-mysql-driver

MySQL driver for Laravel Scout.

image

yab/laravel-scout-mysql-driver

MySQL driver for Laravel Scout.

  • Monday, June 25, 2018
  • by mlantz
  • Repository
  • 10 Watchers
  • 259 Stars
  • 39,915 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 46 Forks
  • 21 Open issues
  • 21 Versions
  • 30 % Grown

The README.md

Laravel Scout MySQL Driver

Search Eloquent Models using MySQL FULLTEXT Indexes or WHERE LIKE '%:search%' statements., (*1)

  1. Installation
  2. Usage
  3. Modes
  4. Console Command
  5. Configuration

Installation, (*2)


Note: Any Models you plan to search using this driver must use a MySQL MyISAM or InnoDB table., (*3)

If you haven't already you should install Laravel Scout to your project and apply the Laravel\Scout\Searchable trait to any Eloquent models you would like to make searchable., (*4)

Install this package via Composer, (*5)

composer require yab/laravel-scout-mysql-driver, (*6)

Next if you are using laravel version 5.4, include the following ServiceProvider to the Providers array in config/app.php, (*7)

        /*
         * Package Service Providers...
         */
        Yab\MySQLScout\Providers\MySQLScoutServiceProvider::class,

Append the default configuration to config/scout.php, (*8)


'mysql' => [ 'mode' => 'NATURAL_LANGUAGE', 'model_directories' => [app_path()], 'min_search_length' => 0, 'min_fulltext_search_length' => 4, 'min_fulltext_search_fallback' => 'LIKE', 'query_expansion' => false ]

Set SCOUT_DRIVER=mysql in your .env file, (*9)

Please note this Laravel Scout driver does not need to update any indexes when a Model is changed as this is handled natively by MySQL. Therefore you can safely disable queuing in config/scout.php., (*10)

    /*
    |--------------------------------------------------------------------------
    | Queue Data Syncing
    |--------------------------------------------------------------------------
    |
    | This option allows you to control if the operations that sync your data
    | with your search engines are queued. When this is set to "true" then
    | all automatic data syncing will get queued for better performance.
    |
    */

    'queue' => false,

In addition there is no need to use the php artisan scout:import command. However, if you plan to use this driver in either NATURAL_LANGUAGE or BOOLEAN mode you should first run the provided console command to create the needed FULLTEXT indexes., (*11)

Usage, (*12)


Simply call the search() method on your Searchable models:, (*13)

$beers = App\Drink::search('beer')->get();, (*14)

Or With pagination:, (*15)

$beers = App\Drink::search('beer')->paginate(15);, (*16)

Simple constraints can be applied using the where() builder method (each additional WHERE will be applied using AND)., (*17)

$beers = App\Drink::search('beer')->where('in_stock', 1)->get();, (*18)

The following operators can be applied to the WHERE statements: <> != = <= < >= > (= will be used if no operator is specified), (*19)

$beers = App\Drink::search('beer')->where('abv >', 10)->get();, (*20)

For more usage information see the Laravel Scout Documentation., (*21)

Modes, (*22)


This driver can perform different types of search queries depending on the mode set in the scout.mysql.mode Laravel configuration value. Currently 4 different modes are supported NATURAL_LANGUAGE,BOOLEAN,LIKE and LIKE_EXPANDED., (*23)

NATURAL_LANGUAGE and BOOLEAN Modes

In NATURAL_LANGUAGE and BOOLEAN mode the driver will run MySQL WHERE MATCH() AGAINST() queries in the respective modes., (*24)

Both modes search queries will include all of Model's FULLTEXT compatible fields (CHAR,VARCHAR,TEXT) returned from the Model's toSearchableArray() method. It is required to have a FULLTEXT index for these fields. You can create this index using the provided console command., (*25)

For example running a search on a POST model with the following database structure:, (*26)

column name type
id int(10) UN AI PK
content VARCHAR(255)
meta TEXT

would produce the following query in NATURAL_LANGUAGE mode:, (*27)

select * from `posts` where MATCH(content,meta) AGAINST(? IN NATURAL LANGUAGE MODE)

and the following query in BOOLEAN mode:, (*28)

select * from `posts` where MATCH(content,meta) AGAINST(? IN BOOLEAN MODE)

Operators for BOOLEAN mode should be passed as part of the search string., (*29)

For more information see the MySQL's Full-Text Search Functions documentation., (*30)

LIKE and LIKE_EXPANDED Modes

LIKE and LIKE_EXPANDED modes will run WHERE LIKE %?% queries that will include all of the Model's fields returned from toSearchableArray(). LIKE_EXPANDED mode will query each field using each individual word in the search string., (*31)

For example running a search on a Customer model with the following database structure:, (*32)

column name type
id int(10) UN AI PK
first_name VARCHAR(255)
last_name VARCHAR(255)

would produce the following query in LIKE mode given the search string "John":, (*33)

SELECT * FROM `customers` WHERE (`id` LIKE '%John%' OR `first_name` LIKE '%John%' OR `last_name` LIKE '%JOHN%')

and the following query in LIKE_EXPANDED mode given the search string "John Smith":, (*34)

SELECT * FROM `customers` WHERE (`id` LIKE '%John%' OR `id` LIKE '%Smith%' OR `first_name` LIKE '%John%' OR `first_name` LIKE '%Smith%' OR `last_name` LIKE '%John%' OR `last_name` LIKE '%Smith%')

Console Command, (*35)


The command php artisan scout:mysql-index {model?} is included to manage the FULLTEXT indexes needed for NATURAL_LANGUAGEand BOOLEAN modes., (*36)

If the model parameter is omitted the command will run with all Model's with the Laravel\Scout\Searchable trait and a MySQL connection within the directories defined in the scout.mysql.model_directories Laravel configuration value., (*37)

Creating Indexes

Pass the command a Model to create a FULLTEXT index for all of the Model's FULLTEXT compatible fields (CHAR,VARCHAR,TEXT) returned from the Model's toSearchableArray() method. The index name will be the result of the Model's searchableAs() method., (*38)

If an index already exists for the Model and the Model contains new searchable fields not in the existing index the index will be dropped and recreated., (*39)

php artisan scout:mysql-index App\\Post, (*40)

Dropping index

Pass the -D or --drop options to drop an existing index for a Model., (*41)

php artisan scout:mysql-index App\\Post --drop, (*42)

Configuration, (*43)


Behavior can be changed by modifying the scout.mysql Laravel configuration values., (*44)

  • scout.mysql.mode - The mode used to determine how the driver runs search queries. Acceptable values are NATURAL_LANGUAGE,BOOLEAN,LIKE and LIKE_EXPANDED., (*45)

  • scout.mysql.model_directories - If no model parameter is provided to the included php artisan scout:mysql-index command the directories defined here will be searched for Model's with the Laravel\Scout\Searchable trait and a MySQL connection., (*46)

  • scout.mysql.min_search_length - If the length of a search string is smaller then this value no search queries will run and an empty Collection will be returned., (*47)

  • scout.mysql.min_fulltext_search_length - If using NATURAL_LANGUAGE or BOOLEAN modes and a search string's length is less than this value the driver will revert to a fallback mode. By default MySQL requires a search string length of at least 4 to to run FULLTEXT queries. For information on changing this see the MySQL's Fine-Tuning MySQL Full-Text Search documentation., (*48)

  • scout.mysql.min_fulltext_search_fallback - The mode that will be used as a fallback when the search string's length is less than scout.mysql.min_fulltext_search_length in NATURAL_LANGUAGE or BOOLEAN modes. Acceptable values are LIKE and LIKE_EXPANDED., (*49)

  • scout.mysql.query_expansion - If set to true MySQL query expansion will be used in search queries. Only applies if using NATURAL_LANGUAGE mode. For more information see MySQL's Full-Text Searches with Query Expansion documentation., (*50)

The Versions

25/06 2018

dev-master

9999999-dev

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli
by Matt Lantz

17/02 2018

v2.0.3

2.0.3.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli
by Matt Lantz

13/12 2017

v2.0.2

2.0.2.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli
by Matt Lantz

20/09 2017

v2.0.1

2.0.1.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli
by Matt Lantz

20/09 2017

dev-develop

dev-develop

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli
by Matt Lantz

30/07 2017

v2.0.0

2.0.0.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli
by Matt Lantz

13/07 2017

v1.0.14

1.0.14.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

07/07 2017

v1.0.13

1.0.13.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

21/06 2017

v1.0.11

1.0.11.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

21/06 2017

v1.0.12

1.0.12.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

02/06 2017

v1.0.10

1.0.10.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

04/05 2017

v1.0.9

1.0.9.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

07/03 2017

v1.0.8

1.0.8.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

29/01 2017

v1.0.7

1.0.7.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

09/01 2017

v1.0.6

1.0.6.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

06/01 2017

v1.0.5

1.0.5.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

16/11 2016

v1.0.4

1.0.4.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

10/11 2016

v1.0.3

1.0.3.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

12/10 2016

v1.0.2

1.0.2.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

11/10 2016

v1.0.1

1.0.1.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli

10/10 2016

v1.0.0

1.0.0.0

MySQL driver for Laravel Scout.

  Sources   Download

MIT

The Requires

 

by Damian Crisafulli