tarre / laravel-redis-scout-engine
Redis engine for Laravel Scout
Installs: 12 356
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 1
Forks: 2
Open Issues: 0
pkg:composer/tarre/laravel-redis-scout-engine
Requires
- laravel/scout: ~9.0|~10.0|~11.0
Suggests
- php-redis: PHP extension for Redis support (Required php extension, faster than predis)
- predis/predis: PHP library for Redis support (Easy to install)
README
About Laravel Redis Scout engine
Since no proper Redis engine was available for Laravel Scout I created one. Tested with ~10k records, response time was ~0.1 sec on local redis instance
Installation
Install with composer
composer require tarre/laravel-redis-scout-engine
.env
SCOUT_DRIVER=redis
REDIS_HOST=....
REDIS_PASSWORD=null
REDIS_PORT=6379
scout.php (only required if you want to change anything)
<?php return [ // .... /* |-------------------------------------------------------------------------- | Redis configuration |-------------------------------------------------------------------------- | */ 'redis' => [ /* |-------------------------------------------------------------------------- | What connection to use |-------------------------------------------------------------------------- | | Decide which redis connection will be used by the Engine | | Read more here: https://laravel.com/docs/10.x/redis | */ 'connection' => [ 'name' => null, // use default connection ], /* |-------------------------------------------------------------------------- | Chunk size for redis hScan |-------------------------------------------------------------------------- | | | Read more here: https://redis.io/commands/hscan | */ 'scan_chunk' => 1000, /* |-------------------------------------------------------------------------- | Search method |-------------------------------------------------------------------------- | | Decide which search method to use when searching | | * STRPOS (case-sensitive https://php.net/strpos) | * STRIPOS (DEFAULT) (case-insensitive https://php.net/stripos) | * WILDCARD (case-insensitive preg_match but it will only accept "*" as wildcard) | * REGEX (Can cause exceptions https://php.net/preg_match) */ 'method' => \Tarre\RedisScoutEngine\SearchMethods::STRIPOS, /* |-------------------------------------------------------------------------- | orderBy sort options |-------------------------------------------------------------------------- | | Read more about sort options on PHPs official docs | | https://www.php.net/manual/en/function.sort.php */ 'sort_options' => SORT_NATURAL ] ];
Usage
Callback for search
If you to filter the results for get and paginate you can use the \Tarre\RedisScoutEngine\Callback
use App\Models\User; use Tarre\RedisScoutEngine\Callback; User::search('xxxx', fn(Callback $cb) => $cb->mapResult(fn(User $user) => ['id' => $user->id, 'name' => $user->name, 'abc' => 123]))->paginate()
{
    "current_page":1,
    "data":[
        {
            "id":1,
            "name":"Kade Trantow",
            "abc":123
        },
        {
            "id":73,
            "name":"Kaden Gulgowski",
            "abc":123
        },
        {
            "id":722,
            "name":"Kade Goyette",
            "abc":123
        },
        {
            "id":1836,
            "name":"Dr. Kade Ankunding",
            "abc":123
        },
        {
            "id":3260,
            "name":"Kade Murray",
            "abc":123
        },
        {
            "id":8916,
            "name":"Prof. Kade Howe",
            "abc":123
        },
        {
            "id":9889,
            "name":"Kade Spinka",
            "abc":123
        }
    ],
    "first_page_url":"http:\/\/localhost?query=kade&page=1",
    "from":1,
    "last_page":1,
    "last_page_url":"http:\/\/localhost?query=kade&page=1",
    "links":[
        {
            "url":null,
            "label":"« Previous",
            "active":false
        },
        {
            "url":"http:\/\/localhost?query=kade&page=1",
            "label":"1",
            "active":true
        },
        {
            "url":null,
            "label":"Next »",
            "active":false
        }
    ],
    "next_page_url":null,
    "path":"http:\/\/localhost",
    "per_page":15,
    "prev_page_url":null,
    "to":7,
    "total":7
}