Laravel框架redis搜索引擎扩展 Laravel-RediSearch

羿昊英
2023-12-01

Laravel-RediSearch允许索引和搜索Laravel模型。它提供了Laravel Scout驱动程序。

安装

composer require ethanhann/laravel-redisearch

注册提供商
将此条目添加到config / app.php中的providers数组中。

Ehann\LaravelRediSearch\RediSearchServiceProvider::class

配置侦查驱动程序
在config / scout.php中更新Scout驱动程序。

'driver' => env('SCOUT_DRIVER', 'ehann-redisearch'),

定义可搜索架构
定义将在索引上使用的字段类型

<?php

namespace App;

use Laravel\Scout\Searchable;
...
use Ehann\RediSearch\Fields\TextField;
use Ehann\RediSearch\Fields\GeoField;
use Ehann\RediSearch\Fields\NumericField;
use Ehann\RediSearch\Fields\TagField;
use Ehann\RediSearch\Fields\GeoLocation;
...

class User extends Model {
    use Searchable;

    public function searchableAs()
    {
        return "user_index";
    }

    public function toSearchableArray()
    {
        return [
            "name" => $this->name,
            "username" => $this->username,
            "location" => new GeoLocation(
                                $this->longitude,
                                $this->latitude
                            )
            "age" => $this->age,
       ];
    }

    public function searchableSchema()
    {
        return [
            "name" => TextField::class,
            "username" => TextField::class,
            "location" => GeoField::class,
            "age" => NumericField::class
      ];
    }
}

导入模型
导入配置为可搜索的“产品”模型:

artisan ehann:redisearch:import App\\Product

导入前删除索引:

artisan ehann:redisearch:import App\\Product --recreate-index

导入没有ID字段的模型(应该很少使用):

artisan ehann:redisearch:import App\\Product --no-id

查询过滤器
如何查询过滤器?过滤标签字段

App\User::search("Search Query", function($index){
    return $filter->geoFilter("location", 5.56475, 5.75516, 100)
                  ->numericFilter('age', 18, 32)
})->get()

有关其他信息,请参见Laravel Scout文档

 类似资料: